• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelセルにVBAでINDEX関数を入力)

VBAでINDEX関数を使ってExcelセルに数式データを入力する方法

このQ&Aのポイント
  • VBAのWorksheetFunctionを使用して、Excelセルに数式データを入力する方法を説明します。具体的には、INDEX関数とMATCH関数を使って、指定された範囲のセルに数式を入力する手順を解説します。
  • 数値1~3を列に連続で入力すると、対応するイニシャルA~Iが入力される式を実現するためには、VBAのWorksheetFunctionを使用し、INDEX関数とMATCH関数を組み合わせて使用する必要があります。この方法により、特定の条件に基づいてセルに数式を入力することができます。
  • VBAを使用してExcelセルに数式データを入力する方法を説明しました。INDEX関数とMATCH関数を組み合わせて使用することで、特定の条件に基づいてセルに数式を入力することができます。ぜひこの方法を活用して、効率的なデータ処理を行ってください。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.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

kuma0220
質問者

お礼

有難うございます。非常に勉強になり助かりました。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

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

kuma0220
質問者

お礼

有難うございます。勉強になりました。

kuma0220
質問者

補足

上のコードFor~Nextの場合がセルに式が入らず次のセル値参照時に進めますが"B15"セル等にに数値が入っていなかった場合デバックエラーが表示されます。 "B11"セルは空白でも他のセルは入力可能になるようにエラー処理ができないものでしょうか。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 列・行をオートフィルでコピーした場合、 行番号・列番号も増えていく関数をそのまま記載すれば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

kuma0220
質問者

お礼

有難うございます。勉強になりました。

kuma0220
質問者

補足

できればセル自体に式のデータではなく値が入力したいのですが。