• ベストアンサー

VBAで変数の取扱い方を教えてください。(初心者です)

現在アクティブになっているセルに、下記のようにリストAというブックのシートAの任意のセルの式(文字)を取得したいと考えています。 下記ではR22C2となっていますが、この部分に任意のセルを取り込めるように変数を使いたいのですが、どのように変数を入れ込めばよいのか分かりません。(R1C1形式でなくA1形式でも構わないのですが) ActiveCell.FormulaR1C1 = "='[リストA.xls]シートA '!R22C2" また、取得先のセルが空っぽの時の表示が0になってしまうのですが、無表示にすることは可能でしょうか? 初歩的な質問かも知れませんがよろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >リストAというブックのシートAの任意のセルの式(文字)を取得したいと考えています。 たぶん、ブックのシートの値を取り出すという意味だと思います。 このコードの欠点は、一度、セルに式を置いて、Excel側のリンク機能を使わないといけないことですね。式を置かずに、取り出す方法もありますが、それはご要望次第です。また、この類のコードは、ユーザー定義関数に変換できません。以下のコードは、A1方式でも、R1C1方式でも、どちらでも可能です。 また、取得先のセルが空っぽ(Empty)と「0」とを区別できませんので、「0」の時は、消去するようにしました。 なお、ブック名が見つからないときは、メッセージが出ますが、シート名が違うときは、Excelからダイアログが出ます。 Sub GetDatafromBook() '他のブックから値を取り出す式の入力 Dim myRow As Variant, myCol As Variant, FileName As String Dim SheetName As String, ModeA1 As String    FileName = "リストA"  'ファイル名  SheetName = "シートA"  'シート名  myRow = 22  '行数  myCol = 2   '列数  ModeA1 = "" 'A1方式、こちらに入れると、こちらが優先される。    If Len(Dir(FileName)) = 0 Then MsgBox "ブック名が違います。", 64: Exit Sub  If Len(ModeA1) = 0 Then  'R1方式  ActiveCell.FormulaR1C1 = _  "='[" & FileName & "]" & SheetName & "'!R" & myRow & "C" & myCol    Else  'A1方式  ActiveCell.FormulaLocal = _  "='[" & FileName & "]" & SheetName & "'!" & ModeA1    End If  '式が0の場合は、中身が削除され。(0とEmtpyの区別はない)  If ActiveCell.Value = 0 Then ActiveCell.ClearContents  '値に変換   'ActiveCell.Value = ActiveCell.Value End Sub

maidoookini2005
質問者

お礼

ありがとうございました。 みなさんのご回答を元に悩みが解決しました。 詳しく書いていただきとても参考になりました。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

Dim R Dim C R = 1 C = 1 ActiveCell.FormulaR1C1 = "='[リストA.xls]シートA '!R" & R & "C" & C '空白の時に0表示を消す場合 ActiveCell.FormulaR1C1 = "=IF('[リストA.xls]シートA '!R" & R & "C" & C & "="""","""",'[リストA.xls]シートA '!R" & R & "C" & C & ")" 'A1型式 Dim Cel Cel = "A1" ActiveCell.FormulaR1C1 = "='[リストA.xls]シートA '!" & Cel

maidoookini2005
質問者

お礼

ありがとうございました。 みなさんのご回答を元に悩みが解決しました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

関数式の中で変数化したい部分を & でつなげればOKです。 Sub Test1()  For i = 1 To 10   ActiveCell.Value = "='[リストA.xls]シートA '!B" & i   ActiveCell.Offset(1, 0).Activate  Next i End Sub ちょっと解りづらいと思いますが、下記は IF で "" の時に "" にしてます。 "" を入れるのは """" のようにします。 Sub Test2()  For i = 1 To 10   ActiveCell.Value = "=IF('[リストA.xls]シートA '!B" & i & _             "="""","""",'[リストA.xls]シートA '!B" & i & ")"   ActiveCell.Offset(1, 0).Activate  Next i End Sub

maidoookini2005
質問者

お礼

ありがとうございました。 みなさんのご回答を元に悩みが解決しました。

maidoookini2005
質問者

補足

早速のご回答ありがとうございました。 ご提示頂いたプログラムで対処できそうです。 ところでFormulaR1C1の場合、相対位置を示すため変数が2つ必要ですがこのような場合はどのように表記するのでしょうか? それと折角ご回答頂いたのに恐縮ですが後のプログラムは意味がよく理解できませんでした。

関連するQ&A