- ベストアンサー
Excelマクロによる表から行と列の値を取得する方法
- Excelの表から特定の記号を探し、その行と列の値を取得するマクロを組む方法について質問です。
- 具体的には、表の中から指定した記号を選ぶと、その行と列に対応する値(年月)を取得するマクロを作成したいとのことです。
- 1つずつではなく、一括で複数の値を変換し転記するマクロが必要であり、どのように組めば良いのかわからない状況です。ご教示いただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! マクロでないとダメですか? 表内に重複がない!という前提であれば関数で対応できると思います。 ↓の画像で元データがSheet1で下側のSheet2に表示するとします。 A列に検索(選ぶ)データを入力します。 B1セルに =IF(COUNTIF(Sheet1!$A$1:$M$6,A1),INDEX(Sheet1!A$1:A$6,SUMPRODUCT((Sheet1!A$1:M$6=A1)*ROW(A$1:A$6)))&"年"&INDEX(Sheet1!A$1:M$1,,SUMPRODUCT((Sheet1!A$1:M$6=A1)*COLUMN(A$1:M$1)))&"月","該当データなし") という数式を入れオートフィルで下へコピーすると 画像のような感じになります。 ご希望の方法でなかったらごめんなさいね。m(_ _)m
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! たびたびごめんなさい。 どうしてもマクロで!というコトであれば・・・ 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 尚、Sheet1・Sheet2のレイアウトは前回同様とします。 (Sheet1のデータも当然、重複なし!という前提です) ※ Sheet2のB列に表示させてしまうと、仮に数式でやりたい場合は数式も消えてしまいますので C列に表示させてみました。 Sub Sample1() 'この行から Dim i As Long, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") For i = 1 To wS2.Cells(Rows.Count, "A").End(xlUp).Row Set c = wS1.Cells.Find(what:=wS2.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then wS2.Cells(i, "C") = wS1.Cells(c.Row, 1) & "年" & wS1.Cells(1, c.Column) & "月" Else wS2.Cells(i, "C") = "該当データなし" End If Next i End Sub 'この行まで こんなんではどうでしょうか?m(_ _)m
お礼
大変遅くなりました。有難うございました。
お礼
こんばんは、tom04さん。お礼が遅くなり申し訳ありません。素晴らしいです。思っていた動作です。有難うございました。