- ベストアンサー
VBAでINDEX関数を使ってExcelセルに数式データを入力する方法
- VBAのWorksheetFunctionを使用して、Excelセルに数式データを入力する方法を説明します。具体的には、INDEX関数とMATCH関数を使って、指定された範囲のセルに数式を入力する手順を解説します。
- 数値1~3を列に連続で入力すると、対応するイニシャルA~Iが入力される式を実現するためには、VBAのWorksheetFunctionを使用し、INDEX関数とMATCH関数を組み合わせて使用する必要があります。この方法により、特定の条件に基づいてセルに数式を入力することができます。
- VBAを使用してExcelセルに数式データを入力する方法を説明しました。INDEX関数とMATCH関数を組み合わせて使用することで、特定の条件に基づいてセルに数式を入力することができます。ぜひこの方法を活用して、効率的なデータ処理を行ってください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
続けてお邪魔します。 エラー処理について・・・ 安直な方法ですが ↓のコードにしてみてください。 Sub Sample2() Dim i As Long, j As Long On Error Resume Next '←おまじないでこの行を追加 For j = 2 To 5 For i = 1 To 3 Cells(i + 10, j) = WorksheetFunction.Index(Range("A1:A9"), WorksheetFunction.Match _ (i, Range(Cells(15, j), Cells(23, j)), False)) Next i Next j End Sub これで1~3のデータがない場合でも何とか対処できると思います。m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! >WorksheetFunctionで行うにはどのように・・・ を見逃していました。 WorksheetFunctionでもできなくはないですが、数式を入れる範囲の行・列の変数を宣言し For~Nextでループしてやる必要があるのではないかと思います。 Sub Sample2() Dim i As Long, j As Long For j = 2 To 5 For i = 1 To 3 Cells(i + 10, j) = WorksheetFunction.Index(Range("A1:A9"), WorksheetFunction.Match _ (i, Range(Cells(15, j), Cells(23, j)), False)) Next i Next j End Sub といった具合です。 エラー処理はしていません。 それよりもNo.1のようにワークシート関数をそのまま利用するほうが簡単だと思います。 ただし、前回のコードでは実データではなく関数によって表示されているデータになりますので、 実データにする場合は↓のコードに変更してみてください。 Sub Sample1() With Range("B11:E13") .Formula = "=IF(ISERROR(INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0))),"""",INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0)))" .Value = .Value End With End Sub 何度も失礼しました。m(_ _)m
お礼
有難うございます。勉強になりました。
補足
上のコードFor~Nextの場合がセルに式が入らず次のセル値参照時に進めますが"B15"セル等にに数値が入っていなかった場合デバックエラーが表示されます。 "B11"セルは空白でも他のセルは入力可能になるようにエラー処理ができないものでしょうか。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 列・行をオートフィルでコピーした場合、 行番号・列番号も増えていく関数をそのまま記載すればOKだと思います。 まず、B11セルに入れる数式を考えます。 色々方法はありますが、仮に =IF(ISERROR(INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0))),"",INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0))) という数式にすれば行・列方向にオートフィルでお望みに結果になると思いますので、 それをそのまま利用します。 コードにすれば Sub Sample1() Range("B11:E13").Formula = "=IF(ISERROR(INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0))),"""",INDEX($A$1:$A$9,MATCH(ROW(A1),B$15:B$23,0)))" End Sub といった感じになると思います。 ※ 注意点としては 普通の関数の「空白」に!のところは「ダブルクォーテーション」を4個続けます。 こんなんではどうでしょうか?m(_ _)m
お礼
有難うございます。勉強になりました。
補足
できればセル自体に式のデータではなく値が入力したいのですが。
お礼
有難うございます。非常に勉強になり助かりました。