重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

こんにちは。タイトルの通りのことをしたく色々悩んでおります。
下に張ったコードを見ていただけますか。
やりたい流れはわかっていただけると思います。
ところどころ、VBAの決まりに従っていない箇所があると思いますがそれを指摘し、
正しい記述を教えていただけませんか。
それを自分の中で理解したいと思っています。
宜しくお願い致します。


Sub Macro2()
'
' Macro2 Macro
'
'変数宣言
Dim OpenFileName As String
Dim value As Integer

'ファイルオープン&ファイル名格納
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xlsm")
'ファイルが無かった時
If OpenFileName <> "False" Then
Workbooks.Open OpenFileName
End If

'セルD3のデータを取得
value = OpenFileName.Worksheets("Sheet1").Range("D3").value

End Sub

A 回答 (1件)

こんばんは。



気になった点
  value というプロパティ名を変数には使わないこと。
 OpenFileName については、Variant を使う方法もあります。
 そうすると、VarType で、Booelan 値が返りますので、それで、終了させます。
 ブックを開いたら、その受ける側の左辺は、Workbook オブジェクトになっていますので、それを利用します。
 なお、私自身は、変数はなるべく短い名前を使っています。
 myVal という書き方をキャメル型といい、OpenFileNameのような書き方をパスカル型と言います。大文字・小文字を組み合わせて使うようにします。
my と付けたり、m を先頭に付けるのは、プレフィックス文字といい、ローカル変数の意味を表しています。

また、慣例的に小文字を使ってもよいのが、sh =Worksheet, wb =Workbook
i,j ,k のなどのカウンター変数があります。また、ここには出てきませんでしたが、Integer というデータ型は特別な意味をもたせることが多いのです。
特に、Excelは、32bit が標準ですから、Long型の方が、Integer型よりも速い処理ができると言われています。

なお、これが決定的だということではありませんが、VBAは、後々みると、読めなくなることが多いので、コメントは目印になる所とかに入れますが、全部は書き入れません。
もし、もうご存知のことがありましたから、その点は、どうぞ大目にみてください。

'//
Sub Macro2R()
'
' Macro2 Macro
'
'変数宣言
Dim OpenFileName As Variant
Dim myVal As Long
Dim Wb As Workbook

'ファイルオープン&ファイル名格納
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xlsm")
'ファイルが無かった時
If VarType(OpenFileName) = vbBoolean Then Exit Sub
Set Wb = Workbooks.Open(OpenFileName)

'セルD3のデータを取得
myVal = Wb.Worksheets("Sheet1").Range("D3").Value

End Sub
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
紹介していただいたコードを参考に作り、おかげさまで問題なく動きました。
これから作っていきたい業務用マクロの基礎となる部分でしたので大変助かりました。
ありがとうございます!!

お礼日時:2018/03/12 10:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!