ExcelVBAの使い方とパス名取得の方法

このQ&Aのポイント
  • ExcelVBAを使用して特定のパス名を取得する方法の質問です。提供されたコードの最後の部分で、パス名の中の¥が正しく機能していないため、画像が正しく貼り付けられません。フルパスを作成するための正しい方法についてのアドバイスをお願いします。
  • ExcelVBAを使用してパス名を取得する方法に関する質問です。提供されたコードの一部で、パス名の中の¥を正しく扱う方法がわかりません。フルパスを作成するための助言をお願いします。
  • ExcelVBAの使い方とパス名取得の方法についての質問です。提供されたコードでは、パス名の中の¥が適切に使用されず、画像が正しく挿入されません。パス名を正しく結合してフルパスを作成する方法を教えてください。
回答を見る
  • ベストアンサー

ExcelVBAの使い方 ¥の使い方おしえてください。

ExcelVBAの使い方 ¥の使い方おしえてください。 現在、パス名取得に努めているのですが、最後がうまくいきません。 Dim MyObjFo As Object Dim Myname As String Set MyObjFo = CreateObject("Shell.Application") _ .BrowseForFolder(0, "フォルダを選択して下さい", 0, "C:\Documents and Settings\ユーザー名\My Documents\") If MyObjFo Is Nothing Then Exit Sub MsgBox MyObjFo.Items().Item().Path MsgBox MyObjFo.Items.Item.Path Myname = MyObjFo.Self.Path For i = 1 To 7 ActiveSheet.Pictures.Insert( _ " " & Myname & " & " ¥ " & " & Cells(i, "A") & ".JPG").Select 上は途中までのそーすですが変数MynameとCells(i, "A") をつなぐ間に入る¥がうまく機能しなく エクセルシート上に画像が張り付いていかないのでパス名の中の¥をうまくつないでフルパスにする方法を 教えてください。 お願いします。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

『¥の使い方』というより、変数と文字列の繋ぎ方ですね。 まずは簡略な例で確認したほうが良いですよ。 Sub sample()   Dim f As String   Dim s As String      f = "c:\mydocuments"   s = "abcde"   MsgBox f & "\" & s & ".jpg" End Sub こんな感じで、『 変数 & "文字列" & 変数 & "文字列" 』 みたく繋ぎます。 Sub test()   Dim MyObjFo As Object   Dim Myname As String   Dim fName  As String   Dim i    As Long   Set MyObjFo = CreateObject("Shell.Application") _          .BrowseForFolder(0, "フォルダを選択して下さい", 0)   If MyObjFo Is Nothing Then Exit Sub   Myname = MyObjFo.Self.Path & "\"   'MsgBox Myname   With ActiveSheet     For i = 1 To 7       fName = Myname & .Cells(i, "A").Value & ".JPG"       'MsgBox fName       If Len(Dir(fName)) > 0 Then         .Pictures.Insert fName       Else         MsgBox fName & "が見つかりません"       End If     Next   End With   Set myobj = Nothing End Sub

yorosi18
質問者

お礼

回答ありがとうございます。大変感謝してます。 Myname = MyObjFo.Self.Path & "¥" fName = Myname & .Cells(i, "A").Value & ".JPG" つまりこの&の使い方がじゅうようだったんですね。 すごいです。ここまで長々と親切に教えてくれてありがとうございます。 納得できました。 If Len(Dir(fName)) > 0 Thenの使いかたもすばらしいです。 長さで判断に使うとは。 これでかなりぐっと便利になりました。

その他の回答 (1)

回答No.1

試してはいませんが、\(半角)ではなく¥(全角)になっているのが原因ではないでしょうか。

関連するQ&A

  • ExcelVBA どこが間違えていますか?

    ExcelVBA 初心者です。 下記のようなプロシージャを人様の作ったのをコピーして作ったのですが意図したとおりになりません。どこが間違っているのか教えてください。 私の意図は選択したフォルダの中の全ファイル(Book)名をアクティブシートのA列に順番に表示したい、です。今は実行すると全部セルA1に表示されてしまって、最後の1つのファイル名しか分かりません。ファイルごとに別のセルに表示したいのです。よろしくお願いします。 Sub ファイル一覧() Dim foldername As String Dim filename As String Dim i As Integer Dim dlg_folder As FileDialog Set dlg_folder = Application.FileDialog(msoFileDialogFolderPicker) Folder_Dialog: dlg_folder.Show If dlg_folder.SelectedItems.Count <> 1 Then Exit Sub Else foldername = dlg_folder.SelectedItems.Item(1) MsgBox "選択したフォルダは " & foldername & " です。" filename = Dir(foldername & "\*.xls", vbNormal) If filename = "" Then MsgBox "Excelファイルがありません。" GoTo Folder_Dialog End If End If Set dlg_folder = Nothing Do While filename <> "" For i = 1 To Workbooks.Count Cells(i, 1).Value = filename i = i + 1 Next i filename = Dir() Loop MsgBox "フォルダ " & foldername & " の中のファイルはすべて表示されました。" End Sub あれ、なぜかインデントが無効になっています。

  • VBAでCSVファイルを読み込もうとしていますが、

    VBAでCSVファイルを読み込もうとしていますが、 「ファイルが見つかりません」とエラーが表示されます。 どのように対処していいのかわかりません。 教えてくください。 Sub readCsv() Dim csvFile As String Dim ch As Integer Dim csvStr As String Dim str() As String Dim i As Integer Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) targetFolder = oFolder.Items.Item.Path Set fso = CreateObject("Scripting.FileSystemObject") Set fileList = fso.GetFolder(targetFolder).Files For Each file In fileList csvFile = file.Name ch = FreeFile Open csvFile For Input As #ch i = 1 Do While Not EOF(1) Line Input #ch, csvStr Close #ch str = Split(csvStr, ",") Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str i = i + 1 Loop Next End Sub

  • EXCELVBAであるセルに設定されている条件式書式を取得したいと

    EXCELVBAであるセルに設定されている条件式書式を取得したいと 以下のマクロを組みました。しかし、3つ設定されている条件式のうち 1つの条件が3回表示されるため、困っています。 何が悪いのかご教授ください。 Public Sub FormatConditionsTest() Dim obj As Range Set obj = Cells(108, 10) Dim colFmt As FormatConditions Set colFmt = obj.FormatConditions Dim item As FormatCondition For Each item In colFmt MsgBox (item.Formula1) Next End Sub

  • 【Excel VBA】選択フォルダへの相対パス

    色々なサイトを参考に、Excel VBAにて以下の様なロジックを作りました。 -------------- Dim SHELL, MYPATH Dim TARGETDIR As String Set SHELL = CreateObject("Shell.Application") Set MYPATH = SHELL.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, ThisWorkbook.Path) If MYPATH Is Nothing Then End TARGETDIR = MYPATH.items.Item.Path Set SHELL = Nothing Set MYPATH = Nothing -------------- ブックのあるパス配下のフォルダを選択して、フルパスを"TARGETDIR"に格納します。 質問は2つです。 (1)"~.items.Item.Path"の構文の意味を教えて下さい。 (2)フルパスではなく"ブックのあるパスから見た、選択したフォルダへの相対パス"を知る方法を教えて下さい。 よろしくお願いします。

  • ExcelVBAマクロでGUIによるファイル名指定

    ExcelVBAマクロについて確認させてください。 下記のようにマクロのあるカレントフォルダに存在するファイルのなかから 読み込みたいファイルの名前を手入力してそれを変数aに読み込ませています。 ですが、この方法ですとユーザがいちいち手入力しなければならず、 ユーザ負担が大きいのと入力漏れおよび入力ミスが発生する恐れがあります。 そこで、マウスでファイルをクリックして指定するように基礎的な操作をマウスによって 行うGUIを作成したいのですが、ExcelVBAマクロで可能でしょうか。 あるいはExcelVBAに導入が可能なソフトウェアおよびそれが可能なソフトウェア があればぜひご教授ください。 以上、よろしくお願いいたします。 ---------------------------------- Sub sample() Dim FN As String Dim FullPathFileName1 As String Dim a As String FN = InputBox("読み込むファイル名を入力してください。(拡張子も含む。)") FullPathFileName1 = ThisWorkbook.Path & "\" & FN a = CreateObject("Scripting.FileSystemObject").GetFile(FullPathFileName1).OpenAsTextStream.Readall a = Replace(a, vbCrLf, "") '改行コードの削除 CreateObject("Scripting.FileSystemObject").GetFile(FullPathFileName1).OpenAsTextStream.Close End Sub

  • 以下のデータがあり、これをExcel VBAの連想配列として格納したい

    以下のデータがあり、これをExcel VBAの連想配列として格納したいと考えています。 MsgBoxでキーとアイテムを表示させると表示されるのですが、 最後に一例としてExistsで確認するとFalseが返ってきます。 これは配列に格納されていないのでしょうか。 また格納されていないとすると、どうすれば格納できるのでしょうか。 A 列   B列 35   apple 37   orange 40   banana 以下がコードです。 sub test() Dim i as integer Dim myDic as Object Dim keys as Variant Set myDic = CreateObject("Scripting.Dictionary") For i = 1 to 3 myDic.Add Cells(i, 1), Cells(i, 2) Next i keys = myDic.keys For Each keys In myDic MsgBox "キー名:" & keys & vbCr & "値:" & myDic.Item(keys) Next keys MsgBox myDic.Exists(35) End Sub

  • VBA 特定のシートに同じ処理をさせたい

    下記のプログラムはランキングをHTML化にしたものです。 シート名3つ ・スペシャルクラス ・オープンクラス ・ビギナークラス で入力し、同時に処理したいと考えています。 https://excel-ubara.com/excelvba1r/EXCELVBA520.html 分からないことはHTML名で保存する処理です。 保存するファイル名 Sample.html それを同時に保存する方法を教えてください。 スペシャルクラス.html オープンクラス.html ビギナークラス.html Sub convertHTML() Dim ws As Worksheet Dim i As Long Dim LineData As String Dim Target As String Target = ActiveWorkbook.Path & "\Sample.html" Set ws = ThisWorkbook.Worksheets(1) i = 1 With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open LineData = "" Do While Not (ws.Cells(i, 1).Value = "" And ws.Cells(i, 2).Value = "" And ws.Cells(i, 3).Value = "") LineData = LineData & "<div>" & ws.Cells(i, 1).Value & "</div>" & vbCrLf LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf i = i + 1 Loop .WriteText LineData, 1 .SaveToFile Target, 2 .Close End With MsgBox Target & "に書き出しました" End Sub

  • 日付の間にハテナが入る

    Sub test() Dim objFS, objFol, shellObj, folderObj, myFol, myFile Dim i As Long Dim myName As String myFol = "C:\Users\test" Set objFS = CreateObject("Scripting.FileSystemObject") Set objFol = objFS.GetFolder(myFol) Set shellObj = CreateObject("Shell.Application") Set folderObj = shellObj.Namespace(myFol) Cells(1, 1) = "ファイル名" Cells(1, 2) = "撮影日時" For Each myFile In objFol.Files myName = myFile.Name If UCase(Right(myName, 3)) = "JPG" Then i = i + 1 Cells(i, 1) = myName Cells(i, 2) = folderObj.GetDetailsOf(folderObj.ParseName(myName), 12) End If Next Set objFS = Nothing Set objFol = Nothing Set shellObj = Nothing Set folderObj = Nothing End Sub このコードをエクセルシート上に書き出せば、問題なく日付が書き出せるのに、 Debug.Print folderObj.GetDetailsOf(folderObj.ParseName(myName), 12) とすると、 撮影日時が ?2010/?02/?28 ??14:04 ?2010/?05/?15 ??15:14 ?2010/?05/?23 ??16:45 ?2010/?06/?03 ??18:19 ?2010/?06/?19 ??13:25 ?2010/?06/?26 ??10:22 ?2010/?06/?29 ??18:39 ?2010/?07/?01 ??18:23 ?2010/?07/?02 ??19:13 のようにハテナが入るのですが、なぜでしょうか?

  • EXCELVBAでデータをテキストファイルで出力したいと

    EXCELVBAでデータをテキストファイルで出力したいと考えています。 ***************************** 作成したVBA ***************************** Sub test_Click() Dim fNAME As String fNAME = "c:\test.txt" Open fNAME For Output As #1 i = 1 Print #1, "<test=" & Cells(1, i) & "," & Cells(2, i) & "," & Cells(3, i) & "," & Cells(4, i) & "," & Cells(5, i) & ">" Close #1 '閉じる End Sub ***************************** エクセルの値 ***************************** A列 1 2 3 4 5 ***************************** 出力されたテキストファイル ***************************** <test=1,2,3,4,5> このようになっていますが、 エクセルが A列 1 2 のように、2個しかないと、 <test=1,2,,,> のようになってしまいます。 <test=1,2> ↑のようになるように、エクセルの値に応じて、 「,」が出力しないようにしたいです。 どうしたらよいのでしょうか。 よろしくおねがいします。

  • ExcelVBAでデスクトップのPATHを取得するには

    こんにちわ。ExcelVBAで、ワークシートのA列に入力されているデータをTextファイルに保存するプログラムを作りました。下記のものです。 ================================= Sub Expo_TXT() Dim Rows As Long Dim StrData As String Dim Fs As Object, A As Object Set Fs = CreateObject("Scripting.FileSystemObject") Set A = Fs.CreateTextFile("c:\test.txt", True) For Rows = 1 To 10 StrData = Worksheets("Sheet1").Cells(Rows, 1).Value A.WriteLine StrData Next Rows A.Close End Sub ================================= しかし見てのとおりcドライブのルートにtest.txtという名前で保存するようになっています。 できれば、そのパソコンのデスクトップに保存したいのですが、どうすれば、パソコンのデスクトップのPATHを取得できるでしょうか? それぞれのパソコンのデスクトップは c:\windows\デスクトップという様にWin98マシンもあれば c:\Documents and Settings\Hanako\デスクトップや c:\Documents and Settings\Taro\デスクトップという場合もあります。多分APIとか使うんだろうなと思い、Webの解説ページを読んだりしましたがAPI使ったことが無いのでチンプンカンプンでした。 できれば具体的なコーディング例をご提示いただければ助かります。

専門家に質問してみよう