• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:変数の定義について)

変数の定義について

このQ&Aのポイント
  • 変数の定義について他のブックから検索値をVLOOKで転記させるマクロを作成しましたが、変数の型宣言が上手くないために転記処理ができません。
  • 変数宣言部分をコメントアウトすると動作しますが、宣言部分をコメントアウトして動作確認した結果、『Dim 検索値 As Double』があると動作しないことが分かりました。
  • Valiantに変更しても動作しなかったため、この原因をご存知の方は助けてください。

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

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

普通、モジュールレベルの変数の宣言をする必要はないと思います。Sub プロシージャ内に入れてあげればよいと思います。どういう目的なのか分かりませんから、会社名と検索値だけは、外に出しておきます。 If 検索値 = "" Then Exit Do 文字比較しているのですから、Double型で比較したら、エラーが発生します。 Double型ですと、何もデータが入っていないのか、それとも、0 なのか比較できません。 Range 型のまま、IsEmpty という方法もありますが、一般的には、セルの値には、If 検索値 = ""としますから、検索値のデータ型は、Variant 型でおけばよいです。慣例的なものです。 また、On Error Goto ErrorHandler では、ピンポイントエラーは検出できません。 掲示板では、違った書き方が流れているようですが、一般的には、以下のような方法が良いと思います。 ところで、VBAは、なるべく、2バイト文字の変数は使いづらいのでやめたほうがよいです。私の場合は、Excel の他のバージョンも入れていますので、検索が使えないという不具合があるからです。 '// Dim 会社名 As String Dim 検索値 As Variant 'Double Sub 一覧() Dim Base As Workbook, Code As Workbook Dim 範囲 As Range Dim i As Long   Set Base = Workbooks("転記元.xls")   Set Code = Workbooks("転記先.xls")   Set 範囲 = Base.Worksheets("転記元").Range("A4:AX5000")   Do     検索値 = Code.Worksheets("転記先のシート").Cells(i + 2, 1).Value     If 検索値 = "" Then Exit Do     On Error Resume Next     会社名 = "" '一旦、空にする。そうしないとエラー時に更新されない     会社名 = Application.WorksheetFunction.VLookup(検索値, 範囲, 6, False)     On Error GoTo 0     If 会社名 <> "" Then       Code.Worksheets("転記先のシート").Cells(i + 2, 2) = 会社名     End If     i = i + 1   Loop End Sub

quia_10
質問者

お礼

回答ありがとうございます。希望通りの動作になりました。 モジュールレベルの変数にしたのは、同モジュール内で取り込んだリストをソートする等 といった小さなマクロでも使用するためです。ご指摘いただいた2バイト変数名についても 修正したいと思います。ありがとうございました。

その他の回答 (1)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

間違っていたらすいません。 検査値がどのような値になっているかわかりませんが 整数型なら   Dim 検索値 As Integer(-32,768 ~ 32,767 の範囲の値) 長整数型なら   Dim 検索値 As Long(-2,147,483,648 ~ 2,147,483,647 の範囲の値) 文字列型なら   Dim 検索値 As String あたりではないでしょうか。

quia_10
質問者

お礼

お返事ありがとうございました。 情報が中途半端で申し訳ありません。検査値は6桁の整数です。 変数の型名を調べる~TypeName関数を使って調べたら、「Double」と出たので それを用いました。 また、回答をいただいた「Integer」「Long」「String」でテストしましたが 同じ結果となりました。 貴重な時間を割いていただきありがとうございました。

関連するQ&A

専門家に質問してみよう