セルのパスが読み取らない

このQ&Aのポイント
  • Excel一覧表をマクロで作成しています。初心者なのでなかなか思いどおりに行きません。アドバイスをお願いします。
  • Excel2000でセルのフルパスを指示し、条件を付けてフォルダーを選択するマクロを作成しています。
  • 質問文章のコードを見ると、変数宣言やパスの格納、条件の取得などが行われていますが、一部エラーが発生しているようです。
回答を見る
  • ベストアンサー

セルのパスが読み取らない

Excel一覧表をマクロで作成しています。 色々探して見つけたマクロを少し改良しようと思いましたが 初心者なのでなかなか思いどおりに行きません(T~T) すみませんがアドバイスをお願いします。 ~環境~ win XP Excel2000 です。 ~内容~ セル上のフルパス(B,1)を指示をし条件を付け フォルダーを選択(2コまで)と言ったマクロを 作成使用と思っています。  A  B  C  D  E 1   @パス 2     条件 3     フォルダー1 4     フォルダー2 5 6 以下記載 解らないところに"*"を付けています。 ~コード~ Sub ファイル名一覧() 'マクロ実行画面の凍結 Application.ScreenUpdating = False '変数宣言 Dim Path As String←*ここの部分追加しています。 Dim FileName As Variant '・・・ファイル名を格納 Dim FOLDER(2) As Variant Dim x As Integer '・・・FOLDER(x)とし検索するフォルダを更新する変数 Dim Gyou As Integer, LastGyou As Integer '・・・ファイル名を入力する行(増えるから変数) Dim 条件 As Variant 'パス格納 Path = Range("B2")←*ここの部分追加しています。 If Path = "" Then Exit Sub←*ここの部分追加しています。 '定数宣言 Const PAS As Variant = Path '・・・フォルダの場所 ↑*ここの部分が原因?"定数式必要です。"でます(T~T) Const Retu As Integer = 2 '・・・ファイル名を入力する列 '変数の初期値設定 x = 1 Gyou = 6 '・・・ファイル名を入力する開始行 FOLDER(1) = Range("D3") '・・・検索するフォルダ(1) FOLDER(2) = Range("D4") '・・・検索するフォルダ(2) '条件の格納 条件 = Cells(2, 4)   ~~以下省略~~ 長々と書いてしまい申し訳ございません。宜しくお願いします。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

constでは値として変数を使用できません >Const PAS As Variant = Path '・・・フォルダの場所 Const PAS As Variant = "c:\xxx\ooo\" しかし >Const PAS As Variant = Path とする意味がわかりません そのまま、Pathを使用するか Dim PAS As String PAS = Range("B2").Value としては如何でしょう? 変数Pathですが Thisworkbook.Path のPathと紛らわしいので使用しない方が良いと思います 参考まで

itokon0141
質問者

補足

お返事が遅れまして申し訳ございません。 ご回答有り難う御座います。 >しかし >>Const PAS As Variant = Path >とする意味がわかりません すみません、初心者なので意味も無く何となく組んでました。 >constでは値として変数を使用できません はい、そうですね。先に調べてから質問すれば良かったのですが 間違い自体が解らなかったのでそのまま質問してみました。 >変数Pathですが >Thisworkbook.Path >のPathと紛らわしいので使用しない方が良いと思います ご指導有り難うございます。 Pathは使わずに >Dim PAS As String >PAS = Range("B2").Value を使う事にしました。 ただ、下記の様に修正しましたが表示されないのです。 ご面倒でなければもう一度ご指導の程宜しくお願いします。 Sub ファイル名一覧() 'マクロ実行画面の凍結 Application.ScreenUpdating = False '変数宣言 Dim PAS As String Dim FileName As Variant '・・・ファイル名を格納 Dim FOLDER(2) As Variant Dim x As Integer '・・・FOLDER(x)とし検索するフォルダを更新する変数 Dim Gyou As Integer, LastGyou As Integer '・・・ファイル名を入力する行(増えるから変数) Dim 条件 As Variant '定数宣言 PAS = Range("B2").Value Const Retu As Integer = 2 '・・・ファイル名を入力する列  ~~以下省略~~ 以上、宜しくお願いします。

その他の回答 (1)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

>ただ、下記の様に修正しましたが表示されないのです。 これは私にもわかりません 質問に >解らないところに"*"を付けています。 と、ありますので"*"のみの添削しかしていません マクロをすべてアップして戴かないと、これ以上は無理です

itokon0141
質問者

お礼

ご連絡が遅くなり申し訳ございません。 アドバイス有り難う御座います。 >Dim PAS As String >PAS = Range("B2").Value を参考に考えた結果 Dim PAS As Variant PAS = Cells(1, 2) で動きました。 あなた様のアドバイスがなければ完成して いなかったと思います。 本当に有り難う御座います。

関連するQ&A

  • ワイルドカードを用いたセルの値加算&貼り付け

    こんにちは! 下記動きを実現したく、他の質問で方々からご教示いただいた内容をヒントに 下記マクロを組んでみたのですが、実現したい動きになりませんでした。。 知識のある方がいらっしゃれば、間違いを指摘いただけると嬉しいです! <実現したい動き> このファイルの貼り付け先シートのRange(Cells(6, 5), Cells(32, 30))に、 下記条件を満たす全ての値を加算のうえ、ペーストする。 「指定フォルダ」に格納されている、ファイル名に「あいう」を含むファイル(※)の、「指定シート」のRange(Cells(6, 5), Cells(32, 30))に存在する値 ※「あいう」の前後は不一致OK。複数存在し、ファイル数は可変。 <下記マクロを動かした結果> 該当ファイルは複数格納されているが、そのうちの1ファイルのみの値がコピペされている。 Sub マクロ() ' Dim folder As String Dim dws As Worksheet Dim sfile1 As String Dim swb1 As Workbook Dim adr As String Dim c As Integer folder = "C:\Users\指定フォルダ\" Set dws = ThisWorkbook.Worksheets("貼り付け先シート#1") Range(Cells(6, 5), Cells(32, 30))=0 sfile1 = Dir(folder & "*あいう*.xlsm") If sfile1 = "" Then Exit Sub Set swb1 = Workbooks.Open(folder & sfile1) adr = Range(Cells(6, 5), Cells(32, 30)).Address(0, 0, 1) swb1.Sheets("あいう").Range(adr).Copy dws.Range(adr).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd Application.CutCopyMode = False swb1.Close False End Sub

  • 変数の代入について

    他のファイルを参照し変数に代入しましたが 参照式まで代入されてしまいますが、これを回避したいです。 ='C:\フォルダ名\[ファイル名.csv]シート名'!$A$1 理由としては、参照先を知られたくないためです。 Dim A(9) As Variant A(0) = Path & "!$A$1" 'ここの部分の書き方を教えてください。 .Range("B1").Value = A(0) 変数は入力ミスをした場合に元に戻すために使います。

  • ExcelVBAでフォルダーからファルイ名を書き出しリンクを貼り、表示名を変える

    下記のようなVBAをつくったのですがうまく行きません。 Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim ディスプレイ As String  Dim 貼付行 As Integer Dim ハイパーリンク As String Dim strVal As Variant 'Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" 'ドライブを指定する フォルダ = "M.Co,\My Documents" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear 'すべてクリア Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" 'パスを組む ファイル名 = Dir(パス & 拡張子) strVal = Dir(パス & 拡張子) (1)ディスプレイ = Left(strVal, "SEARCH(""."",strVal)-1") 貼付行 = 0    Do While ファイル名 <> ""    貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Cells(貼付行, 1), Address:=ファイル名, TextToDisplay:=ディスプレイ ファイル名 = Dir() '次のファイル名を取り出す Loop End Sub (1)がおかしいです。よろしくお願い致します。

  • 【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

    添付図のような、Excel2003で作成した表内のデータを CSVで保存するマクロを作成したのですが、 図のように、CSVファイルに「""」で値が囲まれた状態で、 保存されてしまいます。 下記にマクロを記載しますので、 どうすれば文字列が「""」で囲まれずに、 カンマ区切りだけのデータで出力されるのか、 ご存知の方おられましたら、ご教示お願い致します。 Sub csv保存() Dim フォルダ名 As String Dim パス名 As String Dim ファイル名 As String Dim データ As Variant Dim 行数 As Long, 列数 As Integer Dim i As Integer, j As Long, k As Long ファイル名 = "test.csv" フォルダ名 = "csv" パス名 = ActiveWorkbook.Path & "\" & _ フォルダ名 'csvフォルダが存在しなければ作成する If Dir(パス名, vbDirectory) = "" Then MkDir パス名 End If ChDir パス名 Open ファイル名 For Output As #1 For i = 1 To Worksheets.Count Worksheets(i).Activate Worksheets(i).Cells(1, 1).Select ActiveCell.CurrentRegion.Select 行数 = Selection.Rows.Count 列数 = Selection.Columns.Count For j = 1 To 行数 For k = 1 To 列数 - 1 データ = Selection.Cells(j, k) _ .Value Write #1, データ; Next k Write #1, Selection.Cells(j, 列数) _ .Value Next j Next i Close #1 End Sub

  • VBAの修正を求められる

    今、このような式を作成しています。 Dim gyou As Integer Dim 金額欄 As String hyouji = "" For gyou = 2 To 100 金額欄 = Range(gyou, 5).Value 最後の行の式が「デバック」などと表示されてしまい 修正を求められています。 何が原因なのかわかりかねます。 教えていただければ助かります。

  • Excel VBA データの入っているセルの取り出し

    Excel VBA データの入っているセルの取り出し Excel2007使用です。 大きなセル範囲の中にデータが点在している場合に、そのデータを一か所にまとめるマクロを作りたいです。セル範囲は決まっています(A1:Q100)。最終的には隣のセルの1列にまとめたいです。 以下のようなマクロを作ってみましたが、いずれも作動しませんでした(エラーメッセージも出ず) NullをEmptyに変えてみても同じでした。 (ややこしいですが、アクティブセルはSheet2、Sheet1へ貼り付けたい) (とりあえずシート内で列上部にまとめようとした) Dim myRange As Range For Each myRange In Range("A1:Q100") If myRange.Value = Null Then myRange.Delete xlShiftUp End If Next myRange End Sub (1行1列ずつの参照をループさせて「空白でない」セルを切り取り-貼り付けさせようとした) Worksheets("sheet2").Activate Dim Gyou As Integer Dim Retsu As Integer For Gyou = 1 To 100 For Retsu = 1 To 17 If Cells(Gyou, Retsu).Value = Not Null Then Cells(Gyou, Retsu).Cut Destination:=Worksheets("sheet1").Cells(5, 2) End If Next Retsu Next Gyou End Sub また、以下のマクロは、実行すると現状のままSheet1のE列以降に移るだけで、データのあるセルだけがまとまるという状態にはなりません。 Range("A1:Q100").SpecialCells(xlCellTypeVisible).Cut Destination:=Worksheets("Sheet3").Range("E1") End Sub 以下は某サイトで、まさに「空白セルを削除しデータの入ってるセルを上詰めにする」というマクロが紹介されていたので、加工してやってみましたが、「RangeクラスのDeleteメソッドが失敗しました」という実行時エラーが出てできませんでした。 Dim WS As Worksheet Dim myRng As Range Dim Lrow As Long Set WS = Worksheets("Sheet1") Lrow = WS.Range("A" & CStr(Rows.Count)).End(xlUp).Row Set myRng = WS.Range("A1:A" & CStr(Lrow)) myRng.SpecialCells(xlCellTypeBlanks).Delete xlShiftUp End Sub データの入っているセルだけを取り出して一つの列にまとめたいのですが、どうしたらいいのでしょうか。

  • ファイルのフルパス splite?InstrRev?

    お世話になります。 エクセル2003のVBAについての質問なのですが、 ファイルパスを分割して、変数に格納したいと考えております。 具体的には、現在のワークブックのパスである C:\○○○\○○○\ABC\test1\test2.xls というフルパスを「C:\○○○\○○○\ABC\」と「\test1\test2.xls」 に分割して、「\test1\test2.xls」だけを変数に格納して他の箇所に 利用したいのです。 下記を試してみたのですが、これでは、「test2.xls」のみしか取得することができません…。 Sub Sample1() Dim PathName As String, FileName As String, pos As Long pos = InStrRev(ThisWorkbook.Path, "\") FileName = Mid(ThisWorkbook.Path, pos + 1) End Sub 一つ上のフォルダ名を含む「\test1\test2.xls」を取得するにはどうすればいいでしょうか。

  • ExcelVBA 変数を使ってセルの番地を表す

    Exce2000のlVBAで Sub Macro11() Dim LastColumn As Integer Dim LastRow As Integer LastColumn=5 LastRow=1 Range(("LastColumn"), ("LastRow")).Select End Sub と打ち込むとエラーが出ます. 変数を使ってセルの番地を指定して セルを選択できないでしょうか?

  • パスを変数にしたいのですが。

    ("ad7")にd:\sample\4index.html というアドレスが入っています。 ファイル名を変えたいので変数にして保存したいと思います。 Dim f As Variant f = Range("ad7") Set wPage = ActiveWorkbook.PublishObjects.Add _ (SourceType:=xlSourceRange, _ Filename:="& f &", _ Sheet:="携帯", Source:="b4:f27") 'Title:="GRAPH") ActiveCell.Activate wPage.Publish True filnameのあとの変数の書き方が分からなく 希望のホルダーに保存できません。 どのように書けばいいのでしょうか。 ちなみに、上記のvbaもネット上から拾ってきたものです。 よろしくお願いいたします。

  • マクロが動作しない

    Office2003にバージョンアップすると動作しないマクロが出ました。ちゃんと動作するものもあります。 内容は変更していないので内容はあってるはずですが 念のためコピーします。 Sub 電装品() Dim Gyou As Integer Dim Gyouz As Integer Dim State As Integer Dim Statez As Integer Dim CelValue As String Dim CelValuez As String Dim CopyCelNo As String Dim CopyCelNoz As String Dim WS1 As Object Dim WS2 As Object Set WS1 = Worksheets("購入品リスト") Set WS2 = Worksheets("電装品リスト") WS2.Range("A:G").Delete Shift:=xlToLeft WS2.Range("B1") = "電 装 品 リ ス ト" With WS2.Range("B1") .Font.Bold = True .Font.Italic = True .Font.Size = 24 End With WS2.Range("D1") = "作成日:" & Date WS1.Range("C3:E3").Copy (WS2.Range("A2:C2")) State = 3 For Gyou = 1 To 2000 CopyCelNo = "A" & State CelValue = WS1.Cells(Gyou, 17).Value If CelValue = "1" Then WS1.Range(WS1.Cells(Gyou, 3), WS1.Cells(Gyou, 5)).Copy (WS2.Range (CopyCelNo)) State = State + 1 End If Next WS1.Range("G3:J3").Copy (WS2.Range("D2:G2")) Statez = 3 For Gyouz = 1 To 2000 CopyCelNoz = "D" & Statez CelValuez = WS1.Cells(Gyouz, 18).Value If CelValuez = "1" Then WS1.Range(WS1.Cells(Gyouz, 7), WS1.Cells(Gyouz, 10)).Copy (WS2.Range (CopyCelNoz)) Statez = Statez + 1 End If Next End Sub

専門家に質問してみよう