質問: Worksheets("Sheet2") rangeshe1("A:V").Select
回答: 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というタグもあるので、そちらも追加すると見てくれる人が増えますよ) やるべきこと まずやるべきことをまとめると 1目的の項目を探す 2見つけた項目から名前・金額を取得する 3作成したVBAマクロの呼び出し方を決める といったところが必要になると思います。 3について 3は根本になりますので先に考えておきましょう。 例えば ・シート上にマクロ起動用のボタンを配置する ⇒A2セルに値を入力したあと、ボタンをクリックすることでマクロが実行されてB4,C4に値が入力される。 ・関数として使えるようなマクロを作成する。 ⇒A2の値を引数として渡すことで名前または金額を返すマクロを作成する。Sheet2のB4,C4ではこの関数にA2セルを引数として記述しておく。 などが考えられます。 個人的には関数として作成したほうが便利そうかな?と思います。 1・2について 1の目的の項目を探す部分ですが、これはFind関数を利用します。 ⇒参考 2Find関数で見つけたセルから列番号を取得すれば、それが名前取得列になります。 さらに+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)`という式を記述すれば、項目に対する名前を取得できると思います。 完成品をまるまる提供するのが質問者さんのためになるとは思いませんが、今回は質問段階でだいぶ苦戦して時間を取られていましたので参考ソースとして提供させていただきました。 すこしイジれば金額の取得関数もできると思いますので、そちらはがんばってみてください。