質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

別シートにあるA列~V列の項目に検索値の入力した文字と一致したすべての行とその隣にある行を表に転記したい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,993

yochan1212

score 7

前提・実現したいこと

Sheet1とSheet2がありSheet1にはA列からV列までに項目(1番~20番)項目の下には
A列(名前)B列(金額)は他のシートからSumif関数を使って集計しています。どちらも項目は一番としています。2列で一組です。そのデータをSheet2のA2に条件(1番)を入力すると表のA4には名前B4には金額が転記される。

該当のソースコード

考え中
Dim sh1, sh2 As Worksheet
Dim row1, row2, maxrow1 As Long
Dim simei, kingaku As Variant
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
rangeshe1("A:V").Select

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2017/05/27 16:58

    そうすると、SHeet1で金額が入っているのはB列だけで、C列~V列に入っている値は、この質問では使わない(無視して良い)という事ですか? それならSheet2のB4セルに関数式を記入するだけで解決できるのですが。

    キャンセル

  • yochan1212

    2017/05/27 18:18

    いえ、C列からV列まで交互に名前と金額が入ってます。共に名前=金額で、検索で一致した番号の名前&金額を抽出してSheet2に貼り付けたい。色々調べて、Find関数で出来ないかと・・

    キャンセル

  • coco_bauer

    2017/05/27 23:06

    vlookupで一組(例えばA-B列)を検索する。それを10個用意して(10個のセルに、vlookup関数の敷を入れて)、そのからエラーでないものを取り出せば出来そう。 括弧の入れ子の階層に上限があるから、たぶん1つの関数式で書くことは無理だと思います。

    キャンセル

回答 1

checkベストアンサー

0

A列からV列までに1番~20番が入っているとありますが、A列~V列は22列あります。
さらにその下の行では、A列には「項目(1番)の名前」、B列には「項目(1番)の金額」が記載されており、2列で1組と記載されています。
そうなると22列では11組しか記載できませんが、1番~20番はどのように入力されていますか?

ここらへんがイメージしにくいので、できればサンプルデータを記載していただきたいのです。

前提

(Sheet1)
・A列~V列の1行目には、2列1組で1番~20番の範囲で値が入力されているが、存在しない番号もある。
・A列~V列の2行目には、1行目で記述した項目に対する名前と金額が入力されている。

Sheet1イメージ
   A   B   C   D   E   F ・・・ U     V   
==========================================
1| 1       2       4            20        
2| 一番100 二番200 四番400      二十番2000

(Sheet2)
・A2に入力された値をSheet1の1行目から検索する
・見つけた項目の項目名と金額をB4,C4に記載する

上記の前提でアドバイスさせていただきます。
また、この質問のキーワードはExcelになっていますが、考え中のVBAを記載していただいていますので、VBAでのアドバイスとさせていただきます。
(TeratailにはVBAというタグもあるので、そちらも追加すると見てくれる人が増えますよ)

やるべきこと

まずやるべきことをまとめると
①目的の項目を探す
②見つけた項目から名前・金額を取得する
③作成したVBAマクロの呼び出し方を決める
といったところが必要になると思います。

③について

③は根本になりますので先に考えておきましょう。
例えば
・シート上にマクロ起動用のボタンを配置する
⇒A2セルに値を入力したあと、ボタンをクリックすることでマクロが実行されてB4,C4に値が入力される。

・関数として使えるようなマクロを作成する。
⇒A2の値を引数として渡すことで名前または金額を返すマクロを作成する。Sheet2のB4,C4ではこの関数にA2セルを引数として記述しておく。

などが考えられます。

個人的には関数として作成したほうが便利そうかな?と思います。

①・②について

①の目的の項目を探す部分ですが、これはFind関数を利用します。
⇒参考

②Find関数で見つけたセルから列番号を取得すれば、それが名前取得列になります。
さらに+1すれば金額の取得列になります。

サンプル

以下は項目名を取得する関数のサンプルです。

Function GetName(vRng As Range) As String

    Dim RetVal As String        '関数戻り値

    Dim sh1, sh2 As Worksheet   '対象シート
    Dim SrchRange As Range      '検索範囲
    Dim SrchVal As String       '検索文字列
    Dim FindRng As Range        '検索結果
    Dim iColName As Integer     '名前取得列
    Dim iColYen As Integer      '金額取得列

    Set sh1 = Worksheets("Sheet1")
    'Set sh2 = Worksheets("Sheet2")     '関数で提供する場合、結果は関数を記載したセルになるのでSheet2の指定は不要になります。

    '検索文字列の設定(=引数のセル値)
    SrchVal = vRng.Value

    '検索範囲
    Set SrchRange = sh1.Range("A1:V1")

    '検索
    Set FindRng = SrchRange.Find(What:=SrchVal, LookIn:=xlValues, LookAt:=xlWhole)
    If Not FindRng Is Nothing Then
        '見つかった場合
        iColName = FindRng.Column     '見つけたセルの列番号 を取得
        'iColYen = FindRng.Column + 1  '見つけたセルの列番号 + 1 を取得

        'Sheet1の2行目から名前を取得
        RetVal = sh1.Cells(2, iColName).Value
    Else
        '見つからなかった場合
        RetVal = ""
    End If

    GetName = RetVal

End Function


これでSheet2のB4セルに=GetName(A2)という式を記述すれば、項目に対する名前を取得できると思います。

完成品をまるまる提供するのが質問者さんのためになるとは思いませんが、今回は質問段階でだいぶ苦戦して時間を取られていましたので参考ソースとして提供させていただきました。
すこしイジれば金額の取得関数もできると思いますので、そちらはがんばってみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/31 08:22

    伝え方が下手で大変ご迷惑をおかけしました。おかげさまでやりたいことが出来ました。本当に有難うございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Excelに関する質問
  • 別シートにあるA列~V列の項目に検索値の入力した文字と一致したすべての行とその隣にある行を表に転記したい。