advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 295 for cell filename (0.001 sec.)
cell (1170), filename (1984)
[[20120725222144]]
#score: 11157
@digest: 4f8859796967e23f06cb675aff23bd3c
@id: 59722
@mdate: 2012-09-03T01:40:40Z
@size: 93734
@type: text/plain
#keywords: copypath (309246), 外拠 (280471), 間l (167681), 月ab (144887), 海外 (86748), myfname (82977), ミニ (81541), 拠点 (72862), 年間 (40605), 数: (36710), ニー (35730), ー) (33281), ク名 (28140), ブッ (18177), temp (17075), buf (13306), 月" (13279), 変数 (11293), abc (10311), に成 (10310), ック (9291), xls (9026), のブ (7790), split (7769), private (7357), filename (6995), セル (6872), hana (6727), ファ (5776), ープ (5231), string (5189), ォル (5177)
『3.VBAでファイル名の一部を一括変換』(ミニー)
HANAさま、長くなりましたので新しく作成いたしました。 前回までの続き[[20120611094035]] 『見出しの変更』のお話になりますが、具体的に表のフォームを 掲載したほうがよろしいでしょうか? (ミニー) ---- 新スレ ありがとうございます。 そうですね。。。 3ヶ月の表以外は、共通ではないのですよね? まずは、どんなイメージなのか それを教えて貰えますか? それも 見出しなのでしょうか? それとも タイトルなのでしょうか? (HANA) ---- フォームが統一されているものが3ヶ月の表と、もうひとつ似た表があるんですが その2つが表の数としては一番多く、メインで使っています それだけでも変わってくれると大変助かります。 対象ブックは、Aブックと部署毎のブックになります。 必ず対象のセルがその月で始まるというところが共通していたので 記載してみました。このようなカンジでよろしいでしょうか? 表1(先日掲載しました3ヶ月の表です) セルE5・・・先月(実際は6月となっています) セルF5・・・今月(F5〜P5まで結合)7月 セルQ5・・・来月 (Q5〜AA5まで結合)8月 セルAB5・・・再来月(AB5〜AH5まで結合)9月 表2 セルH2・・・今月(7月) セルT2・・・来月(8月) セルAF・・・再来月(9月) 見づらいと思いますが、実際はH2に7月があります。 この表はこの部分を結合していませんでした。 A B C D E F G H I J K L M 1 2 7月 3 項目 空白 予定 1Q 2Q 3Q 前回 今回 差 差 差 差 差 追記:他の表もみたのですが、このどちらかの表の見出しが変われば =E7と見出しのセルに数式は入っていましたので一緒に変わると思います。 (ミニー) ---- そういえば、ブック名ですが >月のところはすべて統一してもらったので >いまは、●月xxxxxx.xls タイプか、レート一覧のブックしかないです。 と言う事なので、もしかして ↓の様な事が出来ませんか? [[20071117044909]] 『表の名前をセルに挿入』(GON) (HANA) ---- >と言う事なので、もしかして ↓の様な事が出来ませんか? 表のタイトルはないのですが、 ブックの名前からそのようなことができるんですかっ!? そこから当月の情報がとれれば一番いいかと思います。 ブック名からそのようなことができるのかもう少しよく見てみます。 (ミニー) ---- ためしに3ヶ月の表の H2=LEFT(REPLACE(LEFT(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))-1),1,FIND("[",CELL("filename",$A$1)),),1) 7という数字がでたので、8月のセル T2=H2+1 にしようと思い ユーザー定義で #"月" と入れたのですが、なぜか数式の入っている7月のセルだけ "月"が出ません。。 なぜでしょうか・・・ (ミニー) ---- LEFT関数の戻り値は【文字】で 表示形式で変更出来るのが【値】だからです。 とりあえず、 =現在の式*1 =--現在の式 の様にして、値に変更してみてください。 ちなみに、11,12月の場合は二文字とらないといけないので その判定が必要になると思います。 また、13月は無いので H2+1 部分も、もう少し対応が必要になります。 (HANA) ---- >LEFT関数の戻り値は【文字】で >表示形式で変更出来るのが【値】だからです。 そういうことなんですね〜全然気がつきませんでした。。 それでは表示形式は使わず、数式で入れたほうがいいのでしょうか。 >=現在の式*1 ↓でいいのでしょうか? H2=LEFT(REPLACE(LEFT(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))-1),1,FIND("[",CELL("filename",$A$1)),),1)*1 >=--現在の式 この式はどこのセルでしょうか。--は何を意味していますか? 理解できずすみません(--;) いま式を考えているのですが、おっしゃるとおり1〜9までは1文字ですが、 10〜12は2文字になります Left関数2桁を指定してしまうと余計な文字も入ってしまうので Left関数でよいのか悩んでいます。 (ミニー) ---- その後計算に使用するので、値にしておくのが良いと思います。 その次のセルで足し算をして、値に変わりましたよね。 (だから、表示形式で表示が変わった。) このセルも、何か四則演算して 値に変更してください。 +や-をすると、今度は-や+をして帳尻を合わせないといけないので *1するのが簡単でわかりやすいと思います。 >↓でいいのでしょうか? で良いです。 その下の場合は H2=--LEFT(・・・ と 言った感じです。 H2=-1*-1*LEF(・・・ が簡略されている感じです。 LEFT関数で3文字とると、「○月」となるか「○○」となります。 SUBSTITUTE関数で「月」を置換するのはどうでしょう? すると「○」か「○○」になりますが。 (HANA) ---- HANAさんのお返事を見る前だったので 教えて頂いたのとちょっと違う感じになってしまいました > その後計算に使用するので、値にしておくのが良いと思います。 いろいろ考えてなんとかできました。 あまり関数も詳しくなく、スマートにできてないと思います。。 H2=MID(CELL("filename"),FIND("[",CELL("filename"))+1,FIND("月",CELL("filename"))-FIND("[",CELL("filename"))) T2=MONTH(EDATE(YEAR(NOW()) & "年" & $H$2 & "01日",1)) & "月" AF2=MONTH(EDATE(YEAR(NOW()) & "年" & $H$2 & "01日",2)) & "月" これでも大丈夫でしょうか? 指摘されたのですが ツール→アドイン→分析ツール にチェックが入ってないとダメみたいです。。 (ミニー) ---- 済みません、更新されていますが 書きかけだったので そのまま載せておきます。。。 以下。 あ、そうですね。MID関数が良いですね。 2文字とってSUBSTITUTE〜〜 ってのは、こんなイメージでした。 H2=SUBSTITUTE(MID(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))+1,2),"月","")*1 最後に「*1」しているので、表示形式で変更出来ます。 それから、月の方ですが EDATE関数は2003以前の場合アドイン関数なので 場合によっては #NAME? エラーになるかもしれません。 13月は無い〜 の対応は、思い出したので書いておきます。 単純な式なのに、どうもこの数式を忘れてしまうんですよね。。。 =MOD(H2,12)+1 どうでしょう? (HANA) ---- HANAさん 私のはほかの人はエラーになっちゃいますので却下です↓ ぜんぜんダメでした。 HANAさんのでお願いします(vv) >最後に「*1」しているので、表示形式で変更出来ます。 基本的なことをお伺いしてすみません。 *1だとなぜ表示形式ができるようになるのですか? >=MOD(H2,12)+1 MOD関数、使ったことなかったです。 私のよりスマートでわかりやすいです〜(^^) (ミニー) ---- エクセルの性質(?)で、四則演算(+-*/)すると 計算できれば 計算して、結果を値で返してくれます。 H2+1 の結果のセルも、表示形式で変更出来ましたよね。 (HANA) ---- >H2+1 の結果のセルも、表示形式で変更出来ましたよね。 はい、こういう方法もあるんですね。 そもそも、ファイル名の一部をセルに返すという方法がすごいな〜!って 思いました! これから対象のブックを確認しながら数式を入れていきたいと思います。 ほかの部分、ご不明なところ何かありましたらお知らせください よろしくおねがします(vv) (ミニー) ---- 計算式をいれている途中で手がとまってしまいました・・・ F,G列のセルが年間の4月〜3月までを使って その中のデータをSUMIFで集計しており、見だしが数値になってしまうと 計算されなくなってしまいました。 たとえばF列なんですが F7セル=SUMIF(AN5:AY5,H2,AN7:AY7) という式が入っています。 AN5〜AY5は4月〜3月までの見だしが入力されています H2は教えて頂いた数式の数値の7が表示形式で"7月"とでています。 <追記しました> H2=SUBSTITUTE(MID(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))+1,2),"月","")*1 & "月" とためしに最後にアンドを入れてみたところ、数式はうまくいきますが 左右にある月 =MOD(H2,12)+1 が#VALUEになります。。 年間の表も数値にして表示形式で"月"を入れればいいのかもしれないのですが 何せ数がたくさんあるので・・・(--;) ほかに方法がありますでしょうか? (ミニー) ---- >とためしに最後にアンドを入れてみたところ の案で行くなら、まず H2セルの式の「*1」が不要です。 それから、次のセルで計算値として使用する前に SUBSTITUTE関数で「月」を消した物を使って下さい。 =MOD(SUBSTITUTE(H2,"月",""),12)+1 で、このままだとやはり値のままなので、&"月" をつけて下さい。 >F7セル=SUMIF(AN5:AY5,H2,AN7:AY7) という式が入っています。 これをかえて良いのなら、H2セルの値を使用する時に こちらに「月」をつけてみて下さい。 =SUMIF(AN5:AY5,H2&"月",AN7:AY7) と言った感じです。 そう言えば、一つ前の月を求める式は考えないといけないですね。 それから、現在のコードがどうなっているか 教えて下さい。 (このスレ内では まだ載せて貰ってないので。。。) (HANA) ---- >の案で行くなら、まず H2セルの式の「*1」が不要です。 ありがとうございます。 こんなカンジになりました。 H2=SUBSTITUTE(MID(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))+1,2),"月","") & "月" > SUBSTITUTE関数で「月」を消した物を使って下さい。 お返事待っている間に考えたのですが、わたしのは長くなってしまいました。 やはりHANAさんの方がキレイでわかりやすいですね >これをかえて良いのなら、H2セルの値を使用する時に こちらに「月」をつけてみて下さい。 =SUMIF(AN5:AY5,H2&"月",AN7:AY7) 数式はできれば変えないでほしいとのことだったので、できませんでした。。 >そう言えば、一つ前の月を求める式は考えないといけないですね。 HANAさんの式にマイナス1ではダメなのでしょうか? 前月=MOD(SUBSTITUTE(H2,"月",""),12)-1 >それから、現在のコードがどうなっているか 教えて下さい。 はい、 こちらになります。 Option Explicit Private Const 初期フォルダ As String = "D:¥Test" Private Const 作業マーカー As String = "■" Private Sub UserForm_Initialize() With Me With .ListBox1 .ColumnCount = 2 End With End With End Sub Private Sub CommandButton1_Click() Dim myFol As String Dim myPath As String Dim myMonth As String myFol = GetFolderPath If myFol Like "*月*" Then Me.TextBox1.Value = myFol myPath = GetMonth(myFol) Me.TextBox3.Value = myPath myMonth = AddMonth(myPath) Me.TextBox4.Value = myMonth Me.TextBox2.Value = Replace(myFol, myPath, myMonth) End If End Sub Private Sub CommandButton2_Click() Me.TextBox2.Value = GetFolderPath End Sub Private Sub CommandButton3_Click() Dim CopyPath As String Dim PastPath As String Dim CopyFile As String Dim PastFile As String Dim i As Long Dim ws As Worksheet CopyPath = Me.TextBox1.Value PastPath = Me.TextBox2.Value If CopyPath = "" Or PastPath = "" Then MsgBox "フォルダが指定されていません" Else 'フォルダチェック&作成 If Dir(PastPath, vbDirectory) = "" Then If MsgBox(PastPath & "フォルダがありません。" & vbCr & _ "フォルダを作成しますか?", vbYesNo) = vbYes Then MkDir PastPath Else MsgBox "キャンセルされました" Exit Sub End If End If 'ファイルコピー&リネーム With Me.ListBox1 For i = 0 To .ListCount - 1 'CopyProc CopyPath & "¥" & .List(i, 0), PastPath & "¥" & .List(i, 1) CopyProc CopyPath & "¥" & .List(i, 0), PastPath & "¥" & .List(i, 1), Not .Selected(i) Next i End With MsgBox "作業完了" End If End Sub Private Sub CommandButton4_Click() With Me With .ListBox1 .Height = Application.RoundUp(.Height, -1) If .MultiSelect = fmMultiSelectMulti Then .ListStyle = fmListStylePlain .MultiSelect = fmMultiSelectSingle Else .ListStyle = fmListStyleOption .MultiSelect = fmMultiSelectMulti End If End With End With End Sub Private Sub ListBox1_AfterUpdate() Dim buf As Variant With Me.ListBox1 If .Tag = "" Then If MsgBox("個別修正しますか?", vbYesNo) = vbYes Then buf = Application.InputBox("ファイル名を修正してください。" & vbLf & vbLf & _ .List(.ListIndex, 0), , .List(.ListIndex, 1)) If VarType(buf) <> vbBoolean Then .List(.ListIndex, 1) = buf End If End If .Tag = "Rename" .ListIndex = -1 Else .Tag = "" End If End With End Sub Private Sub TextBox1_Change() SetFileList End Sub Private Sub TextBox2_Change() SetFileList End Sub Private Sub TextBox3_Change() SetFileList End Sub Private Sub TextBox4_Change() SetFileList End Sub Private Sub SetFileList() Dim myFile As String Dim myC As New Collection Me.ListBox1.Clear With Me.TextBox1 If .Value <> "" Then myFile = Dir(.Value & "¥*.xls*") Do Until myFile = "" With Me.ListBox1 .AddItem .List(.ListCount - 1, 0) = myFile .List(.ListCount - 1, 1) = Replace(myFile, Me.TextBox3.Value, Me.TextBox4.Value) End With myFile = Dir() Loop End If End With End Sub '------------------------------------------------------- '月の取得 '----------------------- Private Function GetMonth(myStr As String) As String With CreateObject("VBScript.RegExp") .Global = True .Pattern = "¥d{1,2}月" GetMonth = .Execute(myStr)(0) End With End Function '---------------------------------------------------------- Private Function AddMonth(ByVal myStr As String) As String Dim myReg As Object Dim myMonth As Integer With CreateObject("VBScript.RegExp") .Global = True .Pattern = "¥d{1,2}月" For Each myReg In .Execute(myStr) myMonth = Val(myReg.Value) myMonth = Month(DateSerial(Year(Date), myMonth + 1, 1)) myStr = .Replace(myStr, myMonth & "月") Next myReg End With AddMonth = myStr End Function Private Function GetFolderPath() As String With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = 初期フォルダ If .Show = True Then GetFolderPath = .SelectedItems(1) End If End With End Function Private Sub CopyProc(OpenPath As String, SavePath As String, flg As Boolean) Dim ws As Worksheet With Application .ScreenUpdating = False '----Falseに変更 .Calculation = xlCalculationManual '------計算方法「手動」 .DisplayAlerts = False End With With Workbooks.Open(OpenPath, UpdateLinks:=0) '----リンク更新しない '値コピー作業 If flg Then If .Worksheets.Count = 1 Then CopyWork .Worksheets(1), 3 Else For Each ws In .Worksheets If ws.Name = "差額" Then CopyWork ws, 1 ElseIf ws.Name = "システム" Then CopyWork ws, 2 ElseIf Not ws.Name Like "あいう*" And ws.Name <> "会社差額" Then CopyWork ws, 3 End If Next ws End If End If 'リンク更新作業 For Each ws In .Worksheets ws.Cells.Replace Me.TextBox3.Value, Me.TextBox4.Value, xlPart, xlByRows '-------先月→今月に文字列、リンクを置換え Next ws Application.Calculation = xlCalculationAutomatic '------計算方法「自動」 Application.DisplayAlerts = True Application.ScreenUpdating = True .SaveAs SavePath .Close False End With End Sub Private Sub CopyWork(myWs As Worksheet, Ptn As Integer) 'コピーを3パターンで分岐 Dim myArea As Range Dim myCol As Variant Dim myRng As Range Dim strRowRng As String Dim aryCpyRng As Variant Dim aryDelRng As Variant Dim buf As Variant Select Case Ptn 'ワークシート差額 Case 1 strRowRng = "7:9,23:26,30:42,47:48,51:52,56:56,64:66,68:76,81:89" aryCpyRng = Array("H→E", "J→G") aryDelRng = Array("F", "H", "J") 'ワークシートシステム Case 2 strRowRng = "4:27,30:49,56:75,82:101,118:130,139:151,159:167,176:184,193:195,204:206,214:228,237:251" aryCpyRng = Array("T→G", "AF→S") aryDelRng = Array("H", "T", "AF") 'その他ワークシート("会社差額"、"あいう*"ws除外) Case 3 strRowRng = "7:9,12:19,23:26,30:42,47:48,51:52,56:56,64:66,68:72,74:77,79:81,86:94" aryCpyRng = Array("V→J", "AG→U") aryDelRng = Array("K", "V", "AG") End Select With myWs For Each myArea In .Range(strRowRng).Areas For Each myCol In aryCpyRng buf = Split(myCol, "→") With myArea .Columns(buf(1)).Value = .Columns(buf(0)).Value End With Next myCol Next myArea For Each myCol In aryDelRng Application.Intersect(.Range(strRowRng), .Columns(myCol)).ClearContents Next myCol End With End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If MsgBox("終了しますか?", vbYesNo, "確認ダイアログ") = vbYes Then '----------終了 Cancel = False Else Cancel = True End If End Sub Private Sub CommandButton5_Click() Unload Me End Sub ---- >HANAさんの式にマイナス1ではダメなのでしょうか? >前月=MOD(SUBSTITUTE(H2,"月",""),12)-1 やってみてもらえば分かりますが、駄目です。 H2が「1月」だった場合 12で割った余りが1 それを-1 なので、結果は 0月 に成ってしまいます。 ↓SUBSTITUTE関数と絡めて貰う必要が有りますが =MOD(H2-2,12)+1 基本的にはこんな感じにして下さい。 こちらも 最後に &"月" をつけて下さい。 で、コードの方はもう少し待って下さい。 載せて下さった物から変更しますので。 (HANA) ---- ありがとうございます。 >12で割った余りが1 それを-1 なので、結果は 0月 に成ってしまいます。 そういうことなんですね〜 月がからむと難しくて・・・なかなかうまくできませんでした。 >で、コードの方はもう少し待って下さい。 はい、お待ちしております お忙しいのに本当にありがとうございます。 ---- 変更してみました。 年間ブックは 最初の所でブック名を指定して下さい。 その為、コマンドボタン4はコメントアウトにして有ります。 それらの機能も無くしました。 これまで考えていた動きとは少し変更しました。 リンクがある年間のブック名を 年間L その他の年間のブック名を 年間H で指定して下さい。 リストボックスには、ここで指定したブックが 下側に表示される様にしました。 後の処理に影響して来ます。 リンク元のデータが有るブックより下側に並ぶ様にして下さい。 動きの大きな流としては 1.年間Lブックを 開く 2.それ以外のブックを 開く・新しい場所&名前で保存・閉じる 3.年間Lブックを 新しい場所&名前で保存・閉じる 4.年間L,年間H 以外のブックを 開く・値の更新・上書き保存・閉じる にしてみました。 変更していない所も有りますが 一旦全てのコードを載せておきます。 '------ Option Explicit Private Const 初期フォルダ As String = "D:¥Test" Private Const 年間L As String = "損益計算書まとめ,海外拠点まとめ" Private Const 年間H As String = "客先別売上表,レート一覧" Private Sub UserForm_Initialize() With Me With .ListBox1 .ColumnCount = 2 End With End With End Sub Private Sub CommandButton1_Click() Dim myFol As String Dim myPath As String Dim myMonth As String myFol = GetFolderPath If myFol Like "*月*" Then Me.TextBox1.Value = myFol myPath = GetMonth(myFol) Me.TextBox3.Value = myPath myMonth = AddMonth(myPath) Me.TextBox4.Value = myMonth Me.TextBox2.Value = Replace(myFol, myPath, myMonth) End If End Sub Private Sub CommandButton2_Click() Me.TextBox2.Value = GetFolderPath End Sub Private Sub CommandButton3_Click() Dim CopyPath As String Dim PastPath As String Dim CopyFile As String Dim PastFile As String Dim i As Long Dim ws As Worksheet Dim MyFName As String Dim Buf As Variant Dim Flg As Boolean CopyPath = Me.TextBox1.Value PastPath = Me.TextBox2.Value If CopyPath = "" Or PastPath = "" Then MsgBox "フォルダが指定されていません" Else 'フォルダチェック&作成 If Dir(PastPath, vbDirectory) = "" Then If MsgBox(PastPath & "フォルダがありません。" & vbCr & _ "フォルダを作成しますか?", vbYesNo) = vbYes Then MkDir PastPath Else MsgBox "キャンセルされました" Exit Sub End If End If '年間リンクファイルOPEN For Each Buf In Split(年間L, ",") MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") If MyFName = "" Then If MsgBox(Buf & "ファイルが有りません。" & vbCr & _ "続行しますか?", vbYesNo) = vbNo Then Exit Sub End If Else Workbooks.Open FileName:=CopyPath & "¥" & MyFName, UpdateLinks:=0 End If Next 'ファイルコピー&リネーム With Me.ListBox1 For i = 0 To .ListCount - 1 For Each Buf In Split(年間L, ",") If InStr(.List(i, 0), Buf) Then Flg = True End If Next If Flg Then CopyProc .List(i, 0), PastPath & "¥" & .List(i, 1), True Flg = False Else CopyProc CopyPath & "¥" & .List(i, 0), PastPath & "¥" & .List(i, 1), False End If Next i End With '部署毎値更新 With Me.ListBox1 For i = 0 To .ListCount - 1 For Each Buf In Split(年間L & "," & 年間H, ",") If InStr(.List(i, 0), Buf) Then Flg = True End If Next If Flg Then Flg = False Else RenewProc PastPath & "¥" & .List(i, 1) End If Next i End With MsgBox "作業完了" End If End Sub 'Private Sub CommandButton4_Click() ' With Me ' With .ListBox1 ' .Height = Application.RoundUp(.Height, -1) ' If .MultiSelect = fmMultiSelectMulti Then ' .ListStyle = fmListStylePlain ' .MultiSelect = fmMultiSelectSingle ' Else ' .ListStyle = fmListStyleOption ' .MultiSelect = fmMultiSelectMulti ' End If ' End With ' End With 'End Sub Private Sub ListBox1_AfterUpdate() Dim Buf As Variant With Me.ListBox1 If .Tag = "" Then If MsgBox("個別修正しますか?", vbYesNo) = vbYes Then Buf = Application.InputBox("ファイル名を修正してください。" & vbLf & vbLf & _ .List(.ListIndex, 0), , .List(.ListIndex, 1)) If VarType(Buf) <> vbBoolean Then .List(.ListIndex, 1) = Buf End If End If .Tag = "Rename" .ListIndex = -1 Else .Tag = "" End If End With End Sub Private Sub TextBox1_Change() SetFileList End Sub Private Sub TextBox2_Change() SetFileList End Sub Private Sub TextBox3_Change() SetFileList End Sub Private Sub TextBox4_Change() SetFileList End Sub Private Sub SetFileList() Dim myFile As String Dim myC As New Collection Dim Buf As Variant Dim i As Long Me.ListBox1.Clear With Me.TextBox1 If .Value <> "" Then myFile = Dir(.Value & "¥*.xls*") Do Until myFile = "" With Me.ListBox1 .AddItem .List(.ListCount - 1, 0) = myFile .List(.ListCount - 1, 1) = Replace(myFile, Me.TextBox3.Value, Me.TextBox4.Value) End With myFile = Dir() Loop End If End With With Me.ListBox1 For Each Buf In Split(年間L & "," & 年間H, ",") For i = .ListCount - 1 To 0 Step -1 If InStr(.List(i), Buf) Then .AddItem .List(.ListCount - 1, 0) = .List(i, 0) .List(.ListCount - 1, 1) = .List(i, 1) .RemoveItem (i) Exit For End If Next i Next End With End Sub '------------------------------------------------------- '月の取得 '----------------------- Private Function GetMonth(myStr As String) As String With CreateObject("VBScript.RegExp") .Global = True .Pattern = "¥d{1,2}月" GetMonth = .Execute(myStr)(0) End With End Function '---------------------------------------------------------- Private Function AddMonth(ByVal myStr As String) As String Dim myReg As Object Dim myMonth As Integer With CreateObject("VBScript.RegExp") .Global = True .Pattern = "¥d{1,2}月" For Each myReg In .Execute(myStr) myMonth = Val(myReg.Value) myMonth = Month(DateSerial(Year(Date), myMonth + 1, 1)) myStr = .Replace(myStr, myMonth & "月") Next myReg End With AddMonth = myStr End Function Private Function GetFolderPath() As String With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = 初期フォルダ If .Show = True Then GetFolderPath = .SelectedItems(1) End If End With End Function Private Sub CopyProc(OpenPath As String, SavePath As String, Flg As Boolean) Dim wb As Workbook If Flg Then Set wb = Workbooks(OpenPath) Else Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0) End If Application.DisplayAlerts = False With wb .SaveAs SavePath .Close False End With Application.DisplayAlerts = True Set wb = Nothing End Sub Private Sub RenewProc(SavePath As String) Dim ws As Worksheet With Application .ScreenUpdating = False '----Falseに変更 .Calculation = xlCalculationManual '------計算方法「手動」 .DisplayAlerts = False End With With Workbooks.Open(SavePath, UpdateLinks:=0) '----リンク更新しない '値コピー作業 If .Worksheets.Count = 1 Then CopyWork .Worksheets(1), 3 Else For Each ws In .Worksheets If ws.Name = "差額" Then CopyWork ws, 1 ElseIf ws.Name = "システム" Then CopyWork ws, 2 ElseIf Not ws.Name Like "あいう*" And ws.Name <> "会社差額" Then CopyWork ws, 3 End If Next ws End If Application.Calculation = xlCalculationAutomatic '------計算方法「自動」 Application.DisplayAlerts = True Application.ScreenUpdating = True .Save .Close False End With End Sub Private Sub CopyWork(myWs As Worksheet, Ptn As Integer) 'コピーを3パターンで分岐 Dim myArea As Range Dim myCol As Variant Dim myRng As Range Dim strRowRng As String Dim aryCpyRng As Variant Dim aryDelRng As Variant Dim Buf As Variant Select Case Ptn 'ワークシート差額 Case 1 strRowRng = "7:9,23:26,30:42,47:48,51:52,56:56,64:66,68:76,81:89" aryCpyRng = Array("H→E", "J→G") aryDelRng = Array("F", "H", "J") 'ワークシートシステム Case 2 strRowRng = "4:27,30:49,56:75,82:101,118:130,139:151,159:167,176:184,193:195,204:206,214:228,237:251" aryCpyRng = Array("T→G", "AF→S") aryDelRng = Array("H", "T", "AF") 'その他ワークシート("会社差額"、"あいう*"ws除外) Case 3 strRowRng = "7:9,12:19,23:26,30:42,47:48,51:52,56:56,64:66,68:72,74:77,79:81,86:94" aryCpyRng = Array("V→J", "AG→U") aryDelRng = Array("K", "V", "AG") End Select With myWs For Each myArea In .Range(strRowRng).Areas For Each myCol In aryCpyRng Buf = Split(myCol, "→") With myArea .Columns(Buf(1)).Value = .Columns(Buf(0)).Value End With Next myCol Next myArea For Each myCol In aryDelRng Application.Intersect(.Range(strRowRng), .Columns(myCol)).ClearContents Next myCol End With End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If MsgBox("終了しますか?", vbYesNo, "確認ダイアログ") = vbYes Then '----------終了 Cancel = False Else Cancel = True End If End Sub Private Sub CommandButton5_Click() Unload Me End Sub '------ (HANA) ---- また話が関数になってしまいますが 前月=MOD(H2-2,12)+1 "月" でできました 翌月、翌々月がどこを変えても#VALUE!になってしまいます(TT) どうすればいいのでしょうか・・・関数すらもできません。 >変更してみました。 こんなに早くありがとうございます。 >年間ブックは 最初の所でブック名を指定して下さい。 ここを.xlsを抜かした正しいブック名を入れました Private Const 年間L As String = "損益計算書まとめ,海外拠点まとめ" Private Const 年間H As String = "客先別売上表,レート一覧" >リストボックスには、ここで指定したブックが下側に表示される様にしました。 年間Lの"損益計算書まとめ"というブックが下ではなく一番上にいます。 もしかして名前に関係がありますか? あとの3つのブックは一番下いました。 (ミニー) ---- >翌月、翌々月がどこを変えても#VALUE!になってしまいます(TT) あら〜〜、なんでしょう? =(MOD(SUBSTITUTE(H2,"月",""),12)+1)&"月" で翌月に成りませんか? エラーが出る式を載せてもらえると良いのですが? >"損益計算書まとめ"というブックが下ではなく一番上にいます。 これは、ブック名のマッチングが正しく行われていないと思います。 ブック名は、他の物と区別が付く部分を取り出して指定して貰えば良いです。 長く取り出した方が、他と混ざらない可能性が高くなると思いますが。。。 例えば、他のブックで「損益」「海外」等とつく物が無いなら Private Const 年間L As String = "損益,海外" の様に短いワードでも良いです。 ブック名をもう一度確認してみて下さい。 (HANA) ---- >=(MOD(SUBSTITUTE(H2,"月",""),12)+1)&"月" で翌月に成りましたー! でも前月を同じようにしてみると 前月=(MOD(SUBSTITUTE($H$5-2,"月",""),12)+1)&"月" #VALUEになりました。 当月のH5セルは、別のワークシートのセルが入っています。 当月=システム!F2で1月と表示されています。 >これは、ブック名のマッチングが正しく行われていないと思います。 原因が分かりました… 4つのファイルだけでなく、すべてのファイルがリストボックスにでているのも ファイル名が原因だと思います。 実は損益計算書まとめ.xlsのブック名は 7月ABC_PL.xlsといいます。 そして他の部署毎のブック名は、 7月ABC_PL総務課.xls 7月ABC_PL経理課.xls 7月ABC_PL開発課.xls・・・と、7月ABC_PLまでみんな同じブック名なんです(TT) 私が何も考えずに分かりやすくと思い、正しいブック名を書いておりませんでした。 申し訳ございません〜〜! ---- >前月=(MOD(SUBSTITUTE($H$5-2,"月",""),12)+1)&"月" >#VALUEになりました。 それはまぁ。。。#VALUE!になるでしょうね。。。 一つずつ式を分解して考え直して下さい。 H5セルに「1月」と入っているのですよね? で、どこかのセルに =H5-2 としたら、#VALUE!エラーに成りますよね。 文字は引き算出来ませんので。 >実は損益計算書まとめ.xlsのブック名は 7月ABC_PL.xlsといいます。 >そして他の部署毎のブック名は、 >7月ABC_PL総務課.xls でしたら、一応「ABC_PL.」でやってみますか。 これだと、部署毎のブックとは区別が付くように成ると思います。 ただし、 「'年間リンクファイルOPEN」の >MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") 部分の変更が必要ですね。 イメージが分かりますか? (HANA) ---- >文字は引き算出来ませんので。 そうですよねぇ〜(TT) HANAさんの説明でよくわかりました。 前月=(MOD(SUBSTITUTE($F$5,"月","")-2,12)+1)&"月" で12月と出たのですが、これで大丈夫でしょうか? >でしたら、一応「ABC_PL.」でやってみますか。 はい、これでやってみたところ 下から4つ目に並び変わりました。 その上には部署毎のブックです。 >「'年間リンクファイルOPEN」の >MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") 部分の変更が必要ですね。 ざっくりとしたイメージしかできないのですが この状態ですと、部署毎のブックも開いてしまうということでしょうか? (ミニー) ---- >前月=(MOD(SUBSTITUTE($F$5,"月","")-2,12)+1)&"月" はい、大丈夫と思います。 ヒントだけでたどり着いてもらえて良かったです。 括弧がたくさん有ったりすると、何がどうなっているか分かりにくくなるので エラーが出る場合は、何をやった時にエラーになっているのか 一つずつ戻り値を確認して見るのが良いと思います。 例えば >>前月=(MOD(SUBSTITUTE($H$5-2,"月",""),12)+1)&"月" の式だったら H6 =H5-2 H7 =SUBSTITUTE(H6,"月","") H8 =MOD(H7,12) H9 =H8+1 H10=H9&"月" と、5つの段階に分けられます。 今回は、最初の式を入れた段階で「うぐぅ〜」ってなっちゃいますが。 >この状態ですと、部署毎のブックも開いてしまうということでしょうか? いいえ、「ファイルが無いが続行するか?」のメッセージが出る方へ分岐します。 Dir関数の引数 >CopyPath & "¥*" & Buf & "*.xls*" が、どの様な文字に成るか コードを追ってみて下さい。 (HANA) ---- >一つずつ戻り値を確認して見るのが良いと思います。 はい、分解してみるとわかりやすいですが HANAさんの文字は引き算出来ませんがなかったら、もっと時間かかっていたと思います。 MODもSUBSTITUTEも使ったことがなかったので それだけで抵抗ありましたが、すごい便利だったので勉強になりました。 >CopyPath & "¥*" & Buf & "*.xls*" >が、どの様な文字に成るか コードを追ってみて下さい。 なんとなくのイメージになっちゃうのですが・・・ 指定したTextBox1のなかに年間Lのファイルがなかったとき ファイルがありませんとメッセージがでて、 ファイルがあったとき リンクの更新せずにファイルを開く でしょうか?? MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") If MyFName = "" Then ファイルがなかったとき "ファイルが有りません"のダイアログメッセージがでて・・・ If MsgBox(Buf & "ファイルが有りません。" & vbCr & _ "続行しますか?", vbYesNo) = vbNo Then Exit Sub End If Else ファイルがあったとき リンクの更新せずにファイルを開く??でしょうか Workbooks.Open Filename:=CopyPath & "¥" & MyFName, UpdateLinks:=0 End If ---- >なんとなくのイメージになっちゃうのですが・・・ ここはわりと変更が必要に成る部分だと思いますので 一つずつ確認して下さい。 変数 CopyPath には何が入っているか? 変数 Buf には何が入っている(何が入る)か? Split に関しても、どの様な事が出来るのか、調べてみて下さい。 コード内の他の所でも使われていますので、理解しておく価値は有ると思います。 「今回の処理で何をしているか」と言う事よりも もっと基礎部分について質問して居ます。 中途半端に抜き出しているのでコードとしては不完全ですが Private Const 年間L As String = "ABC_PL.,海外拠点まとめ" PastPath = Me.TextBox2.Value '年間リンクファイルOPEN For Each Buf In Split(年間L, ",") CopyPath & "¥*" & Buf & "*.xls*" ★ Next ★の所である文字列が作られます。(この例では2パターンです) どの様な文字列に成るか、追いかけてみて下さい。 (HANA) ---- 質問が難しくてどうお答えすればあっているのか よくわからないのですが・・・ >変数 CopyPath には何が入っているか? Textbox1に入るフォルダでしょうか? >変数 Buf には何が入っている(何が入る)か? ファルダとブックでしょうか?? >Split に関しても、どの様な事が出来るのか、調べてみて下さい。 Split関数調べたんですが、あまりよくわかりませんでした。 "損益計算書まとめ,海外拠点まとめ"をカンマを区切りに ひとつのファイルとしてみる。っていうことですか? >★の所である文字列が作られます。(この例では2パターンです) 文字列・・・ CopyPath & "¥*" & Buf & "*.xls*" & "ABC_PL.xls*" のようなカンジでしょうか? 質問されているのにみんなハテナがついてしまってすみません(--;) (ミニー) ---- こうやって答えてくれようとして下さっているだけで 一つの正解だと思います。 答えにたどり着く迄には、少しかかるかもしれないですが。 さて、何が分かって何が分からないのか分からないので 回りくどい応答が続くかもしれませんが、教えてください。 まず、「変数」は分かりますか? 今の例だと、年間L,CopyPath,Buf等です。 これらは“入れ物”や“メモ帳”と思ってみてください。 変数:年間Lには、「ABC_PL.,海外拠点まとめ」と言うメモが書いてあります。 変数:CopyPath は、Me.TextBox2.Value=テキストボックス2の値(これは時々で変わります)をメモする為に用意して居ます。 TextBox2の値は、時々で変わりますので 話を簡単にするために ◆2012年の7月から、2012年の8月のブックを作る と言う状況を想定して話を進めて行きたいと思います。 その場合、TextBox2には何と表示されますか? (HANA) ---- >答えにたどり着く迄には、少しかかるかもしれないですが。 ほんとにすみません。 でもこんな私に丁寧に教えてくださっているのでがんばります! >まず、「変数」は分かりますか? Bufが調べてもちょっとあいまいで、これも入れもの?でしょうか? いろんなところで頻繁にでてきますよね〜 >◆2012年の7月から、2012年の8月のブックを作る と言う状況を想定して話を進めて行きたいと思います。 >その場合、TextBox2には何と表示されますか? TextBoxには、D:¥temp¥8月と表示されています。 あ、なんとなく・・・ CopyPath & "¥*" & Buf & "*.xls*" ★に入るのがわかったような わからないようなです。 (ミニー) ---- はい、Buf も変数です。 まずは詳しい話は後回しにして。。。 TextBox2に「D:¥temp¥8月」と表示されている時 PastPath = Me.TextBox2.Value これが実行されると、変数:PastePath には "D:¥temp¥8月" がメモされる事になります。 つまり CopyPath & "¥*" & Buf & "*.xls*" ‾‾‾‾‾‾‾‾ここの所に「D:¥temp¥8月」と書いてある事になります。 ワークシート上で考えてみると A1セル(変数:CopyPath の代わり)に 「D:¥temp¥8月」と書いてある。 A2セルを変数:Buf の代わりに使う事にして A3セルに「ABC_PL.,海外拠点まとめ」・・・変数:年間L の代わりです。 A4セルに =A1 & "¥*" & A2 & "*.xls*" としてみてください。 A2セルはまだ何も入っていないので、A4セルには 「D:¥temp¥8月¥**.xls*」と表示されると思います。 次に必要な知識が ・Split関数 ・For Each 〜 のループ処理 になってくると思います。 どちらもWeb検索して調べてみてください。 Split関数については、たとえば http://officetanaka.net/excel/vba/tips/tips62.htm ループ処理についてはVBAの入門ページを見てもらうと たいてい載っていますので、すぐに見つかると思います。 (HANA) ---- >「D:¥temp¥8月¥**.xls*」と表示されると思います。 はい、表示されました。 A3セルの「ABC_PL.,海外拠点まとめ」は順番で必要なのですか? >次に必要な知識が ・Split関数 教えて頂いたサイト先日みてました。 Split("損益計算書まとめ,海外拠点まとめ",",")ファイルの名前ではなく Split(年間L, ",")なのはなぜですか? ・For Each 〜 のループ処理 グループに指定された、配列、コレクションの各要素に 対して繰り返し処理を行います。とありました それをみたらまた(??)になりました この処理はどこかで2回以上でてくるから、ここで1回で済ましちゃう ということなのでしょうか・・・ (ミニー) ---- 上側の質問の後半部分に関してですが 年間L は、変数です。 変数:年間L には何を入れましたか? 一つ上で >TextBox2に「D:¥temp¥8月」と表示されている時 > PastPath = Me.TextBox2.Value >これが実行されると、変数:PastePath には >"D:¥temp¥8月" がメモされる事になります。 > >つまり >CopyPath & "¥*" & Buf & "*.xls*" >‾‾‾‾‾‾‾‾ここの所に「D:¥temp¥8月」と書いてある事になります。 と書きましたが、この流れは分かりましたか? 変数:年間L に関しても同様なのですが。 (HANA) ---- >変数:年間L には何を入れましたか? "損益計算書まとめ,海外拠点まとめ"です。 変数を使わないとダメなんですね。 >と書きましたが、この流れは分かりましたか? > 変数:年間L に関しても同様なのですが。 はい、その流れは理解できました。 (ミニー) ---- >"損益計算書まとめ,海外拠点まとめ"です。 話が面倒になりますので、想定している物で答えてください。 Private Const 年間L As String = "ABC_PL.,海外拠点まとめ" この様にするのですよね? 実際はブック名が >>実は損益計算書まとめ.xlsのブック名は 7月ABC_PL.xlsといいます。 >>そして他の部署毎のブック名は、 >>7月ABC_PL総務課.xls でしたので。 >変数を使わないとダメなんですね。 変数を使わずに、直接書き込んでも良いです。 変数:年間L を使うことにした理由は ◆メンテナンスのため です。 今後、対象ブックが増えたり 減ったり 名前の変更があった場合 現在の様に、コードを書く所の一番上で指定していた場合、変更場所を見つけやすいですが コード内に直接書いていた場合、探さないといけないですよね。 さらに、変数:年間L は他の部分(全部で4か所)でも使っていますので コード内に直接書いていた場合は、それらのすべてを変更しないといけません。 変数を使うと「これの中身ってなんだっけ?」って成りますが その他の利便性のほうが高くなるなら、やはり変数を使っておいた方がお得だと思います。 >はい、その流れは理解できました。 って事は、お得感に関しての質問だったのでしょうか? (HANA) ---- >コード内に直接書いていた場合は、それらのすべてを変更しないといけません。 はーーー!そういうことなんですね・・・ >変数を使うと「これの中身ってなんだっけ?」って成りますが その変数を使えるようにしているのが、こういうところですか? Dim Buf As Variant CopyPath = Me.TextBox1.Value >って事は、お得感に関しての質問だったのでしょうか? (^^)はい、こっちの方がきっと便利なのかな〜?という 初心者もいいところの疑問でした コード内に直接書いちゃうと変更が大変というところでとても納得できました。 (ミニー) ---- >その変数を使えるようにしているのが、こういうところですか? 後回しにしてたのですが、ご質問になりましたので、先に書いておきますね。 Dim Buf As Variant これは「変数の宣言」と言われています。 ↓の例の方がわかりやすいので、こちらを使いますが Dim i As Long この一文で i と言う名前の変数を使います。(Dim i) この変数には「-2,147,483,648 〜 2,147,483,647 の範囲の値」を入れます。(As Long) と、エクセルに伝えています。 例えばコード内で、 i = "HANA" なんて 文字 を入れようとすると、 「値を入れるって言ってたじゃん」と エクセルが注意してくれます。 すると、自分で書いた間違いに気づきやすいですよね。 また、コードを書くところの先頭に Option Explicit の記述があります。 これがあると、Dim 変数名 と書いてない変数は 使えない事になります。 なので、i = 5 と書くつもりの所を 間違って l = 5 と書いていた場合 「変数:l を使うなんて聞いてないよ」と やはりエクセルが注意してくれます。 これまた、自分で書いた間違いに気づきやすいですよね。 変数名の後ろの As ○○ は、いくつかありますので そのうち慣れて行ってもらえると良いと思います。 > CopyPath = Me.TextBox1.Value この部分はむしろ 「元フォルダの情報が書いてあるのはどこだっけ?TextBoxの何番目だっけ?」 ってならなくて済む様に、変数に入れている感じですね。 で、Splitの話に戻りますが。。。 先にリンクしたページで >Split関数は、ある区切り文字で区切られた文字列を、その区切り文字で区切り、 >区切られた各文字列を、一次元配列として返します。 と書いてあります。 一般機能の データ(D)→区切り位置(E) をやってみた事がありますか? ご存じ無ければ、調べてみてください。 先ほど、A3セルに「ABC_PL.,海外拠点まとめ」を入れてもらったと思います。 これを「,」で区切ってセルに分けてみてください。 B3セルに「ABC_PL.」 C3セルに「海外拠点まとめ」 の様に分かれます。 「,」で区切った時の 0番目の位置にあるのが "ABC_PL." 1番目の位置にあるのが "海外拠点まとめ" なのですが。。。これは大丈夫ですか? (HANA) ---- >この変数には「-2,147,483,648 〜 2,147,483,647 の範囲の値」を入れます。(As Long) そういう決まりがあるのですかー 他にもVariantなど使われていますが、その判断は内容によって使い分けているのですね。 >変数名の後ろの As ○○ は、いくつかありますので >そのうち慣れて行ってもらえると良いと思います。 ここの例とご説明すごくわかりやすかったです。 HANAさんが使われているいろいろなAs ○○を 調べてみたいと思います。 >「元フォルダの情報が書いてあるのはどこだっけ?TextBoxの何番目だっけ?」 >ってならなくて済む様に、変数に入れている感じですね。 この方がすっきりしていてわかりやすいですね。 私はまだ全然なれてないので探すだけでも目がすべっちゃいますが…(--) >一般機能の データ(D)→区切り位置(E) をやってみた事がありますか? >なのですが。。。これは大丈夫ですか? はい、区切り位置よく使うのですごい納得できました! (ミニー) ---- Split はそんな感じです。 区切り位置だと、セルに直接書き出されますが 頭の中で、区切り線がついている状態をイメージしてください。 すると、先のリンク先の内容が分かりますか? MsgBox tmp(0) , MsgBox tmp(1) , MsgBox tmp(2) で一つずつ確認出来る事も。 となると、次は ループ処理のお話になると思いますが どうでしょう? For 〜 Next の方がわかりやすいでしょうか? でしたら、先のリンク先の □配列の要素数を調べる の所で書いてある様に For 〜 Next の形で 書き直すことも出来ますが。 (HANA) ---- >すると、先のリンク先の内容が分かりますか? はい、区切り位置のお話をしてもらったので なんとなくだったのが内容が理解できるようになりました! >For 〜 Next の方がわかりやすいでしょうか? Splitではなく??ということですか? (ミニー) ---- >Splitではなく??ということですか? いや、Splitは使います。 Splitで、今回は元の文字を二つに分けます。 その後ループ処理で、対象ブック(そのような名前のブック)があるかどうか 確認して居るのですが。。。。 1回目のループで、ABC_PL. のブックがあるか 2回目のループで、海外拠点まとめ のブックがあるか ループ処理になっている事は分かりますか? (HANA) ---- >1回目のループで、ABC_PL. のブックがあるか >2回目のループで、海外拠点まとめ のブックがあるか '年間リンクファイルOPENの For〜Nextのところでしょうか? 1回目と2回目のループというのがどの部分なのかがわかっていません。 この中にループが2つもあったんだ・・・という状態です。。すみません。 ABC_PL.と海外拠点まとめのブックは 年間Lになっているところ だと思っていたのでまたわからなくなりました・・・ >ループ処理になっている事は分かりますか? ループ処理は、 For〜Nextで終わってるところですよね。 Forから始まるとそこはループなんだなーというぐらいの認識 しかできてません・・・ (ミニー) ---- >Forから始まるとそこはループなんだなー そうなんです。そこがループなんです。 B3セルに ABC_PL. C3セルに 海外拠点まとめ と分けて書いてください。 ループ処理無しで、B3,C3セルの内容をそれぞれメッセージボックスで表示してみます。 Sub TEST1() MsgBox Range("B3").Value MsgBox Range("C3").Value End Sub もしもセルが10個あったら、MsgBox ・・・ が10行並ぶ事になります。 次にFor Each 〜 のループを使って、メッセージボックスで表示します。 Sub TEST2() Dim Buf As Variant For Each Buf In Range("B3:C3").Value MsgBox Buf Next End Sub もしもセルが10個になったら、Range("B3:C3")のセル範囲を変更するだけで 行数が増えたりはしません。 今回は2つのループで決まっている様ですが 今後増えたり、減ったりする事を考えると お得ですよね♪ 実際にD3以降にもいくつかセルを追加して 確認してみてください。 また、TEST2をもう少し実際のコードに近づけて 確認してみてもらえると良いと思います。 実際のコードに近づける → Range("B3:C3")の所を Split(・・・ に変えたり 等 色々やって確認してみて下さい。 (HANA) ---- >そうなんです。そこがループなんです。 よかったです、そこからすでに間違ってるのかもしれないと思ってました。 >もしもセルが10個になったら、Range("B3:C3")のセル範囲を変更するだけで 行数が増えたりはしません。 実際にやってみたらすごい感動しました(T_T) 大したことではないと思うんですけど、まともにやったことなかったので 例もすごくわかりやすく理解できました。 > 今後増えたり、減ったりする事を考えるとお得ですよね♪ はい!間違えたり、ぬけたりすることもないですよね >実際にD3以降にもいくつかセルを追加して 確認してみてください。 はい、Split使って試してみたいと思います! 丁寧に教えていただいて本当にありがとうございます (ミニー) ---- Split関数練習してみました(^^) B3セルにあいうえお,かきくけこ,・・・といれて 何回か失敗しましたが、カンマで区切ったごとにメッセージボックスがでました〜 Sub TEST2() Dim Buf As Variant For Each Buf In Split(Cells(3, 2), ",") MsgBox Buf Next End Sub (ミニー) ---- そうそう!そうですよ〜!! 少しは分かってきましたか? Split や ループを使わずに、同じ事(指定したメッセージボックスを出す)が出来るコードを作って その後、表示する文字数に増減があった場合を想定してみてください。 一つ追加になったら、コードの中から該当個所を探し出して1行追加。 一つ少なくなったら、コードの中から該当個所を探して1行削除。 をしないといけないので、面倒ですよね。 ここまで来ると、少し上で >Dir関数の引数 >>CopyPath & "¥*" & Buf & "*.xls*" >が、どの様な文字に成るか コードを追ってみて下さい。 と書きましたが、これが分かりますか? ちなみに、 CopyPath = Me.TextBox1.Value でしたね。 上の応答時、少し思い違いをしていた様に思います。 >◆2012年の7月から、2012年の8月のブックを作る 時、それぞれどの様なメッセージ(文字列)になりますか? (HANA) ---- >そうそう!そうですよ〜!! ありがとうございますー(T0T)!!相当時間かかりましたが・・・ やっと理解できました! >CopyPath & "¥*" & Buf & "*.xls*" >と書きましたが、これが分かりますか? うーーん。。応用がきかずすみません。 CopyPath & "¥*" & Buf & "ABC_PL.xls*","*海外拠点まとめ.xls*," ブック名が入りますか? >◆2012年の7月から、2012年の8月のブックを作る > 時、それぞれどの様なメッセージ(文字列)になりますか? CopyPath = Me.TextBox1.Value PastPath = Me.TextBox2.Value があって、フォルダからブックを作成するときですよね・・・ すみません、わかりませんが PastPath & "¥*" & Buf & "*.xls* のようなカンジでしょうか。 (ミニー) ---- えっと。。。。 A1セル(変数:CopyPath の代わり)に 〜〜 A2セルを変数:Buf の代わりに使う事にして A3セルに「ABC_PL.,海外拠点まとめ」・・・変数:年間L の代わりです。 A4セルに =A1 & "¥*" & A2 & "*.xls*" に話を戻しましょうか。 >B3セルにあいうえお,かきくけこ,・・・といれて B3セルが変数:年間L の代わりになってますが A3セルにしてみて下さい。 A1セルが 変数:CopyPath の代わりのセルにしますが A1セルには何を入力すれば良いですか? また、A4セルに入れてもらっている =A1 & "¥*" & A2 & "*.xls*" の式が、どこからきているか分かりますか? 順番に置き換えながら読まないといけませんが 元のコードの MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾この部分です。 (HANA) ---- >A3セルにしてみて下さい。 はい、やってみました。 >A1セルには何を入力すれば良いですか? D:¥temp¥8月です。 >また、A4セルに入れてもらっている >=A1 & "¥*" & A2 & "*.xls*" >の式が、どこからきているか分かりますか? はい、'年間リンクファイルOPENの MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") というのはわかるのですが、メッセージや文字列でとなると どういうことなのかわからなくなります。 (ミニー) ---- >>A1セルには何を入力すれば良いですか? >D:¥temp¥8月です。 TextBox1に「D:¥temp¥8月」と表示されて TextBox2に「D:¥temp¥7月」と表示されるのですか? それで、D:¥temp¥8月のフォルダのブックを D:¥temp¥7月 に作り直すのですか?? >メッセージや文字列でとなると >どういうことなのかわからなくなります。 でしたら、先に Dir関数の方について書いてみます。 例えば Sub TEST3() Dim MyFName As String MyFName = Dir("C:¥TEST¥HANA.xls") MsgBox MyFName End Sub Cドライブの下にTESTと言うフォルダを作り その中に HANA.xls がある状態と 無い状態で TEST3を実行してみてください。 ブックがある時は HANA.xls と言うメッセージボックスが ブックが無い時は 空のメッセージボックスが表示されます。 Dir関数は、括弧の中に書いてある場所にそのようなブックがある場合 そのブック名を。無い場合は「""」を返してくれます。 これで、探しているブックがあるかどうかを確認して 処理を分岐させるのに使って居ます。 実際は、ファイル名が月によって変わります。 「1月HANA.xls」とか「2月HANA.xls」とかですね。 こんな時は、ワイルドカードが使えます。 「*」で 〜何か文字〜 を表せます。 例えば "C:¥TEST¥*HANA.xls" と書いてあれば Cドライブの中のTESTフォルダの中の 〜何か文字があって〜HANA.xls と言うブック と言う指定になります。 もしもそのフォルダ内に「1月HANA.xls」があれば Sub TEST4() Dim MyFName As String MyFName = Dir("C:¥TEST¥*HANA.xls") MsgBox MyFName End Sub メッセージボックスには、そのブック名 1月HANA.xls が表示される事になります。 実際は、この部分は変数を使っているのでもう少しややこしくなっています。 もう少し実際のコードに近づけて、ブック名も変数にしてみます。 Sub TEST5() Dim MyFName As String Dim Buf As Variant Buf = "HANA" MyFName = Dir("C:¥TEST¥*" & Buf & ".xls") MsgBox MyFName End Sub 実際は、変数:Buf へは、ループ処理で次々に変わりますが わかりやすい様に、固定にしてあります。 Dir関数の括弧の中の "C:¥TEST¥*" & Buf & ".xls" Bufの中身/‾‾‾は、「HANA」なので "C:¥TEST¥*" & "HANA" & ".xls" 間の「&」を無くしてくっつけると "C:¥TEST¥*HANA.xls" TEST4と同じ文字列が出来ている事になります。 (HANA) ---- >D:¥temp¥7月 に作り直すのですか?? すみません、D:¥temp¥7月ですよね 今月か来月のことなのかごっちゃになってました >でしたら、先に Dir関数の方について書いてみます。 HANAさんこんなにたくさん書いて頂いて、本当にありがとうございます(TT) TEST3〜TEST5まで試してみました。 ダイアログにHANA.xlsと返ってきました。 結果がちゃんと返ってくると、まるうつしですけど感動します。 > Bufの中身/‾‾‾は、「HANA」なので Bufの中身が「HANA」というところがまずわかってなかったです。 そうすると、MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*")のなかには D:¥temp¥7月¥ABC_PL.xls,と D:¥temp¥7月¥損益計算書まとめ.xls にすれば いいということでしょうか? (ミニー) ---- > Bufの中身が「HANA」というところがまずわかってなかったです。 えっと。。。TEST5 は Buf = "HANA" って行が有りますよね? ここで、変数:Buf に「HANA」と言う文字を書き込んでいます。 だから、その次に出てきた 変数:Buf の中には「HANA」と言う文字が入っています。 Me.TextBox1 には、「D:¥temp¥7月」と入っています。 ですから CopyPath = Me.TextBox1.Value この一行が実行された後は、変数:CopyPath の中に「D:¥temp¥7月」が入っています。 >B3セルにあいうえお,かきくけこ,・・・といれて Sub TEST2() Dim Buf As Variant For Each Buf In Split(Cells(3, 2), ",") MsgBox Buf Next End Sub この時をイメージしてみて下さい。 SplitでB3セルの文字が「あいうえお」「かきくけこ」「・・・」に分けられて 1回目のループで最初に「あいうえお」が 変数:Buf に入ったから あいうえお とメッセージが表示されました。 2回目のループで、次の「かきくけこ」が 変数:Buf に入ったから かきくけこ とメッセージが表示されました。 3回目のループで、その次の「・・・」が 変数:Buf に入ったから ・・・ とメッセージが表示されました。 A1セルに「HANA」と書いたら、A1セルを見た時「HANA」と書いて有りますよね? 変数だって同じです。Buf に「HANA」と書いたら、Bufを見た時「HANA」と書いて有ります。 その時点より前に何も書いて無ければ、当然ですが何も書いて有りません。 やってみて欲しかったのは、コードの動きをご自身でトレースして貰う事でした。 A1セルは、変数:CopyPath の代わりのセルですから「D:¥temp¥7月」と書きます。 A2セルは、変数:Buf の代わりで、今は何も入っていません A3セルは、変数:年間L の代わりですから「ABC_PL.,海外拠点まとめ」 A4セルが、Dir関数の引数に成っている 「=A1 & "¥*" & A2 & "*.xls*"」 ここまでが、とりあえず実際のコードの '年間リンクファイルOPEN の行まで済んでいる状態です。 このセルに値・数式をセットする時点で疑問が有れば言って下さい。 CopyPathの代わりにするのは分かるけど、なんで「D:¥temp¥7月」なの?・・・・等 (HANA) ---- > その時点より前に何も書いて無ければ、当然ですが何も書いて有りません。 ループの前には必ず Buf = "HANA"をしてないとダメなんですね >やってみて欲しかったのは、コードの動きをご自身でトレースして貰う事でした。 はい、実際やってみてこういう答えがでてくるんだー というのがよくわかりました。 > このセルに値・数式をセットする時点で疑問が有れば言って下さい。 ここまでは実際にやってみてどういう作業をするのかよくわかりました。 >CopyPathの代わりにするのは分かるけど、なんで「D:¥temp¥7月」なの?・・・・等 質問もしたいのですが、わからないことだらけで何を質問したらいいのかも わからない状態です なんで「D:¥temp¥7月」なの?も確かにそうです。 ひとつひとつの単語の意味や、どうしてこういう順番で書かれているのか、 ここの部分はどういう処理のところなのか・・・ その場その場でお伺いするかと思います。 丁寧に教えていただいているので、ここの部分はだいぶわかるようになりました(^^) (ミニー) ---- コード内の関係ありそうな所だけ抜き出してみます。 Private Const 年間L As String = "ABC_PL.,海外拠点まとめ" ---Private Sub CommandButton3_Click から抜粋--- CopyPath = Me.TextBox1.Value '年間リンクファイルOPEN For Each Buf In Split(年間L, ",") MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") If MyFName = "" Then If MsgBox(Buf & "ファイルが有りません。" & vbCr & _ "続行しますか?", vbYesNo) = vbNo Then Exit Sub End If Else Workbooks.Open FileName:=CopyPath & "¥" & MyFName, UpdateLinks:=0 End If Next 最初に ◆Private Const 年間L As String = "ABC_PL.,海外拠点まとめ" がありますので、 A3セルは、変数:年間L の代わりですから「ABC_PL.,海外拠点まとめ」 次に ◆CopyPath = Me.TextBox1.Value がありますので、 A1セルが、変数:CopyPath の代わりのセルですから「D:¥temp¥7月」 それから ◆For Each Buf In Split(年間L, ",") の後ろの部分 Split〜 をやってみる事にします。 実際はどこかの変数に入るわけでは無いですが、わかりやすい様に B3セル以降に「,」で区切ってみてください。 A3セルに入力している内容を「,」で区切って 前側をB3セルに。後ろ側をC3セルに入れます。 そして、ループ処理の最初なので、前側の文字(B3セルに入れた文字)を 変数:Buf の代わりのセル A2セルに入れてください。 すると、A4セルに数式の結果が表示されますね? ◆MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ここが、A4セル Dir関数で、その様なブック名があるかどうか確認します。 変数:MyFName の代わりのセルとして、A5セルを使う事にします。 ご自身でフォルダを確認し、ブックがあったらそのブック名をA5セルに入力。 ブックが無かった場合は、A5セルの入力を[Delete]して下さい。 ◆If MyFName = "" Then A5セルの内容を確認して、 メッセージを表示するのか ブックを開くのか 分岐します。 ◆Next ループで元に戻って 次の値の処理が始まります。 ◇For Each Buf In Split(年間L, ",") 変数:Buf の代わりのセル A2セルに 二個目の値(C3セルの値)を入れてください。 ◇〜〜〜 以下、同様に処理が進みます。 今、変数:年間L の中身は Split関数で二つに分けられるので ループ処理が二回行われ、A4セルに表示される物も 二種類に成ると思います。 まずは処理を想像して、どの様に成るか考えて 書いてみてください。 その後、シート上で実際に作業をして 想像した結果と一致するかどうか 確認してみてください。 それを二つともこちらに書き出してみてください。 (HANA) ---- すみません、セルの入力をやってる途中でご質問がわからなくなりました。 >すると、A4セルに数式の結果が表示されますね? A4セルの数式というのは何でしょうか? 前回使った=A1 & "¥*" & A2 & "*.xls*"でしょうか? この数式で、D:¥temp¥7月¥*ABC_PL.*.xls* の答えになりました >まずは処理を想像して、どの様に成るか考えて 書いてみてください。 書くというのはA1〜A5の中の処理で、自分でコードが考えた場合 どのようになるかを 想像して書いてしまっていいのでしょうか? お忙しいところ、すみません(><) (ミニー) ---- そうです♪ A4セルの式の結果として >この数式で、D:¥temp¥7月¥*ABC_PL.*.xls* の答えになりました になりましたよね。 コードでは、そのようなブックがあるかどうかを確認させています。 Dドライブの中の tempフォルダの中の 7月フォルダの中に 〜何か文字〜ABC_PL.〜何か文字〜.xls〜何か文字〜 と言うブック ‾‾‾‾‾‾‾ ‾‾‾‾ ワイルドカードの所の表現が難しいのですが。。。 下波線が引いてある文字が固定で、〜何か文字〜の所は 何か文字があっても良いし、無くても良い 部分です。 ミニーさんが、実際に対象のフォルダを開いて 「*ABC_PL.*.xls*」があるか確認してみてください。 有った場合は、A5セルにそのブック名を入力します。 無い場合は、A5セルを空白の状態にします。 >書くというのはA1〜A5の中の処理で、自分でコードが考えた場合 >どのようになるかを 想像して書いてしまっていいのでしょうか? いや、『ご自身でコードを書いた場合』と言う訳ではなく 変数:Buf の代わりとして使う A2 セルに「ABC_PL.」や「海外拠点まとめ」を入力する前に それらが入力された場合、A4セルにどの様に表示されるのかを 想像してみて下さい。 って事でした。 予習みたいなものです。 先にどの様に成るか考える。 実際にやってみて結果を確認する。 想定と違った場合、どこが違ったのか考える。 この繰り返しが、効率良く学ぶ方法だと思って居ます。 「書く」と言う表現は、どこかに書き留めておかないと どうなると思っていたのか、分からなく成るでしょ? A4セルの数式の結果は、A2セルの値が変わると 変わってしまいますよね? そういう「メモしておいて下さい」と言った意味で使ったのですが。。。 (HANA) ---- >有った場合は、A5セルにそのブック名を入力します。 はい、ブック名を入力するところまでできました! >変数:Buf の代わりとして使う A2 セルに「ABC_PL.」や「海外拠点まとめ」を入力する前に >それらが入力された場合、A4セルにどの様に表示されるのかを 想像してみて下さい。 ここは私が先ほど「Buf="HANA"が必要なんですね。」 と聞いた部分にあたりますでしょうか。 これが抜けてしまうと 結果がちゃんと表示されませんでした! D:¥temp¥7月¥**.xls* 実際↑こうなってみて、どういうことだったのかよくわかりました。 >先にどの様に成るか考える。 実際にやってみて結果を確認する。 >想定と違った場合、どこが違ったのか考える。 これを繰り返して少しでも理解できるようなればいいのですが なかなか理解できずご迷惑おかけしてます・・・ >どうなると思っていたのか、分からなく成るでしょ? はい、私は特にそうなので・・・ >A4セルの数式の結果は、A2セルの値が変わると 変わってしまいますよね? はい、変わってしまいました >そういう「メモしておいて下さい」と言った意味で使ったのですが。。。 すみません。ものすごく大変な宿題だと勘違いしちゃいました。 (ミニー) ---- >ものすごく大変な宿題だと勘違いしちゃいました。 前の時からそうですが、そんなに難しく考えなくて大丈夫だと思います。 私の質問の方も、洗練されている訳ではないので 「どういう事だ!?」と思ったら 問いかけて下さい。 >ここは私が先ほど「Buf="HANA"が必要なんですね。」 >と聞いた部分にあたりますでしょうか。 に関しては、どういった点で「同じ」と思っておられるのかが良く分かりません。 どのタイミングで、何が入るか? と言う事で有れば、そういう事の様な気もしますし。。。?? >はい、ブック名を入力するところまでできました! ブック名、見つかりましたか? ・・・まぁこれは実際にコードを動かしてみてからにしましょう。 ブック名が見つかって、A5セルに書き込んでもらいましたね。 すると ◆If MyFName = "" Then 変数:MyFName の代わりのセルがA5セルにしました。 つまり、MyFName が ="" でないので、Else の方へ分岐して ◆Workbooks.Open FileName:=CopyPath & "¥" & MyFName, UpdateLinks:=0 A1セルが示すフォルダの中の、A5セルに入力されているブックを、リンクの更新無しで開きます。 この部分の書き方は分かりますよね? FileName:= の後ろに、開きたいブックを指定するのですが。 もしも、ブックが見つからず A5セルが空欄だった場合 ◆If MsgBox(Buf & "ファイルが有りません。" & vbCr & _ "続行しますか?", vbYesNo) = vbNo Then メッセージボックスを表示して、[ No ] が選ばれた場合 ◆Exit Sub マクロを終了します。 次のループに移って、次の値に関して同じ事が実行されます。 と、言う事で この部分で何がどうなっているか分かって貰えましたでしょうか? (HANA) ---- > 「どういう事だ!?」と思ったら 問いかけて下さい。 ありがとうございます。お恥ずかしいことも遠慮なく聞いてしまってます。 > ブック名が見つかって、A5セルに書き込んでもらいましたね。 はい、ブック名入力しました。 >◆Workbooks.Open FileName:=CopyPath & "¥" & MyFName, UpdateLinks:=0 やりながら気がついて今更なのですが、 "¥"はフォルダを意味するのでしょうか? &で、はさむのは決まりごとなのでしょうか? >と、言う事で この部分で何がどうなっているか分かって貰えましたでしょうか? はい、ここまで流れがとてもよくわかりました。 このコードの順番って決まっていることだと思うのですが 変数や関数をつかって、ファイルを開いて保存してとか For Each は必ずNextで終わって…Ifを使ったらElseがあって End Ifで終わらせてとか・・・。 やりながら思ったのですが、 これを短時間で作成できるHANAさんが本当にすごいなって思います。 (ミニー) ---- >"¥"はフォルダを意味するのでしょうか? >&で、はさむのは決まりごとなのでしょうか? えっと。。。順番が逆なのかな?? 「ある文字を作りたい。」 これが一番ですね。 ある文字 ってのは、ブック名も含めたパスです。 でないと、どの場所のどのブックの事か エクセルが分かりませんから 「この場所のこのブック」と伝える為の文字を作りたいのです。 文字の作り方は、ワークシート上で =A1 & "¥*" & A2 & "*.xls*" とやるのと同じです。 A4に入れたこの式に疑問は無いのですよね? この式の結果にも、疑問は無いですよね? >このコードの順番って決まっていることだと思うのですが 基本構造が決まっているので、それを当てはめて行くだけです。 文字列を特定の区切りで分けたいと思ったとき 区切り位置 を使おう と思いますね。 そして ウィザードを立ち上げて、いろいろな設定をして 結果を得る。 ミニーさんにとっては、すでに何でも無い事だと思いますが 区切り位置ウィザードに慣れていない(或いは機能を知らない人)にとっては ミニーさんの行為は魔法の様に見えると思います。 でもその人も、幾度かやって慣れてしまえば、問題なく使える様に成ると思いますし 使いどころ(その他の機能も含め いつ・どこで・何を 使えば良いのか)も 簡単に判断し、使える様に成ると思います。 マクロだって同じです。 今はほぼ始めてで「知っておかなくては出来ない事」を知らないので 何をするにも「知る」所から始めないといけませんが それが分かる様になれば、後は使うだけです。 >これを短時間で作成できるHANAさんが 残念ながら、momoさんのコードですけどね。(;^ω^A (HANA) ---- >ある文字 ってのは、ブック名も含めたパスです。 ¥や&は文字をつくるために必要なのですね。 >A4に入れたこの式に疑問は無いのですよね? はい、おかげさまで理解できるようになりました >この式の結果にも、疑問は無いですよね? はい、今回よくわかりました。 >基本構造が決まっているので、それを当てはめて行くだけです。 でも参考書を見ればできる。というものではないですよね… 基本構造というのも慣れてきたらわかってくるものですか? >マクロだって同じです。 えーーーマクロは もう全然別世界で(+_+) >今はほぼ始めてで「知っておかなくては出来ない事」を知らないので はい、毎日HANAさんから初めて知ることばかりです >残念ながら、momoさんのコードですけどね。(;^ω^A いえ、人の作ったものを手直しの方が絶対大変だと思います。 しかもそこにエクセルの資料がないのですよーー(><) もう先生どころか神様です。 (ミニー) ---- >でも参考書を見ればできる。というものではないですよね… エクセルには色々な機能が有ります。 参考書を見れば、どの様な事が出来るか・どの様にするか 分かります。 初めてでも、手順を見ながら実行すれば、実行する事が出来ると思います。 実践を考えた時に、一番必要な能力は 事に当たった時に「あの機能を使おう!!」と思える事 だと思います。 そう思いつければ、実際の手順を覚えていなくても 参考書を引っ張り出して それを見ながら実行すれば結果を得られます。 もう少し近いのが、関数だと思います。 やはり同じ様に、どの様な関数が有るかは いつだって簡単に知る事が出来ます。 ただ、やりたい事をする為に どの関数を使えば良いのか また、何をどの様に組み合わせれば良いのか それが分かる様に成るには 参考書を見るだけでは不十分だと思います。 日常生活でも、色々な道具を使うと思います。 切る道具一つとっても、色々なものが有りますね。 ハサミ、ナイフ、ノコギリ、チェーンソー・・・ 使えるようになる為には、切りたい物を見て 何を使うのが適切なのか分からないといけません。 また、紙をまっすぐ切りたい時 ハサミが無くて定規が有ったら きっと定規を当てて切ると思います。 今、苦も無く出来ている色々な事が出来る様になったのは 本を沢山読んだからでは無く、実際に事にあたったり 他の人がやっているのを見て 習得して来たからだと思います。 参考書を読むにしても、細かい所を見るのではなく たとえば、ループ処理にはどの様なものが有るのか。 それを知るためにはどのページを見ると分かりやすいのか。 と言う事を覚えておいて、コードを作る時に この例だとどのループ処理を使うのが良いのか 色々な例を見て選択し、実際に使ってみる のが 出来る様に成る近道だと思います。 本題に戻りますが、ここから先は、「ステップインで実行」技術を身につけて 実際に動かしてみて下さい。 ↓先ほど検索してヒットした 上位2ページです。 http://www.asahi-net.or.jp/‾ef2o-inue/vba_k/sub04_030_03.html http://vbaexcel.seesaa.net/article/139509207.html 変数の内容を確認する方法や、一行ずつコードを実行する方法が書かれています。 他にも色々なページが有りますので、まずは入門ページから ご自身でみて分かりやすいと思える様な所を見つけてもらえると良いと思います。 実際にコードを動かしてみると 「ファイルが有りません。」 に分岐すると思いますので、変数の内容等に注意しながら 何が悪いのか原因を探ってみて下さい。 (HANA) ---- 帰省中でお時間あけてしまい申し訳ございませんでした。 >参考書を引っ張り出して それを見ながら実行すれば結果を得られます。 はい、ご紹介して頂いたこのサイトよく見ます(^^)↓ http://www.asahi-net.or.jp/‾ef2o-inue/vba_k/sub04_030_03.html おっしゃるとおり関数もそうなんですが、参考書もやりたいことのすべては書いてないので、 組み合わせたり工夫ができないとダメなんですよね… >他の人がやっているのを見て 習得して来たからだと思います。 はい、Vlookup関数も理解するまでに何度もやって最初は苦労しました・・・ >色々な例を見て選択し、実際に使ってみる のが出来る様に成る近道だと思います。 はい、時間かかると思いますが簡単なものからやっていきたいと思います! >実際にコードを動かしてみると「ファイルが有りません。」 (ミニー) 休み中でブックを見ることができないのですが 自宅でブックとユーザフォーム作ってやってみてるのですが Private Const 年間L As String = "ABC_PL.,海外拠点まとめ" '年間リンクファイルOPEN For Each Buf In Split(年間L, ",") MyFName = Dir(CopyPath & "¥*" & Buf & "*.xls*") ABC_PL.xlsと海外拠点まとめ.xlsのファイルがないということですよね "*.xls*"に工夫が必要でしょうか もう少し考えてみます。 ---- 実際にフォルダとファイルを作る所までやってみてくださいね。 両方「ファイルがない」と出るかもしれませんし 片方だけ出るのかもしれません。 &等を使って作った文字列が間違っていると、ブックは見つかりません。 ワークシート上では、COUNTIF関数がワイルドカードが使えるので それも使いながら確認してみると良いかもしれません。 (HANA) ---- お時間あいて申し訳ございません またお忙しいと思いますがご指導お願いいたします。 >実際にフォルダとファイルを作る所までやってみてくださいね。 はい、本番と同じようにやってみました! >片方だけ出るのかもしれません。 "ABC_PLのファイルがありません。続行しますか?" と片方だけでました。 海外拠点まとめは、認識してくれたのでしょうか? >&等を使って作った文字列が間違っていると、ブックは見つかりません。 以前、HANAさんに工夫が必要だといわれた'年間リンクファイルOPENのところでしょうか。 自分なりにエラーがでないように考えてみます。 >ワークシート上では、COUNTIF関数がワイルドカードが使えるので それも使いながら確認してみると良いかもしれません。 先日の例題のようにセルにブック名などを入れてみて、ということでしょうか? CountIFでワイルドカード使ったことがないので'年間リンクファイルOPENのところをやる前に 試してみようとおもいます (ミニー) ---- >海外拠点まとめは、認識してくれたのでしょうか? そうですね。 きっとそうだと思います。 ですから、パスも含めたファイルの文字列を作る CopyPath & "¥*" & Buf & "*.xls*" 部分の内、最後のブック名の部分の指定で変更が必要に成ってきます。 ブック名より前の部分が違っていたら「海外拠点まとめ」の方も 認識しないはずですので。 なので、ブック名だけの確認をしてみて下さい。 ブック名だけなら "*" & Buf & "*.xls*" ですよね。 これを前回の様に、セルに数式として入力。 また、それとは別のセルに正確なブック名(ABC_PL.xls)をコピペしておく。 COUNTIF関数は =COUNTIF(範囲,検索条件) ですから 「範囲」の方が正確なブック名を入れたセル。 「検索条件」の方が、数式で表示された ワイルドカードを使った 曖昧なブック名が入力(表示)されているセル。 に成ります。 この結果が「1」に成る様にしないといけないです。 (HANA) ---- >部分の内、最後のブック名の部分の指定で変更が必要に成ってきます。 ABC_PLは他の文字列が混ざってるブックもあるから エラーになるんですよね >なので、ブック名だけの確認をしてみて下さい。 入力あってますか? A1セル D:¥temp¥7月 A2セル 空白 A3セル ABC_PL.xls A4セル =A1 & "¥*" & A2 & "*.xls*" A5セル =COUNTIF(A3,A4) >この結果が「1」に成る様にしないといけないです。 いま0なので、もうちょっと考えてみます。 COUNTIFのところ絶対違うと思います(・・;) (ミニー) ---- あ〜、A4セルを「=A1 & "¥*" & A2 & "*.xls*"」にするなら A3セルには、フルパスを入れておいて貰うのが良いと思います。 D:¥temp¥7月¥ABC_PL.xls ですね。 で、A4セルには何と表示されていますか? (HANA) ---- 身内に不幸がありお返事おそくなって申し訳ございません! >で、A4セルには何と表示されていますか? D:¥temp¥7月¥**.xls* となりました A2セルは空白でよかったのでしょうか? A3セルのファイル名が**.xlsにでてきてくれると思っていたので(--;) あれ??ってなりました。 すみません、またこんなところでとまってしまって… (ミニー) ---- えっと。。。? もう一度、何を確認しないといけないのか。 そのためには、どの様にしておかないといけないのか。 スレを読み直してみて下さい。 A4セルの式が > A4セル =A1 & "¥*" & A2 & "*.xls*" なので、A2セルが空白では何の確認にもなりませんが。 コード内の Dir(CopyPath & "¥*" & Buf & "*.xls*") ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ここの所が 変数を使わない場合どのようになっているか確認するために A4セルを使うことにしていますよね? (HANA) ---- >もう一度、何を確認しないといけないのか。 >そのためには、どの様にしておかないといけないのか。 >スレを読み直してみて下さい。 なんでできないの〜。とあわててました。。すみません。 A3セルにブック名を入れて、A4セルに数式をいれると D:¥temp¥7月¥*ABC_PL.*.xls* になって A5セルに=COUNTIF(A4,"*" & A3 & "*")をいれたら 答えが"1"になりました! Countifをこういう風に使ったことなかったのですがあってますか? (ミニー) ---- どちらが検索範囲で、どちらが検索条件ですか? セルが一つずつだからイメージがつきにくいですかね。。。? A10以降に、今回処理対象ブックのフルパスを羅列して その中から、A4セルの条件に一致するブックが何個あるか探す。 ってお題だとどうですか? (HANA) ---- >どちらが検索範囲で、どちらが検索条件ですか? そうですよね!本当にすみません。 A4セルがD:¥temp¥7月¥*ABC_PL.*.xls* A3セルがABC_PL. A4の中に*ABC_PL.*のブックがあるかどうか検索するというイメージで =COUNTIF(A4,"*" & A3 & "*")とやってみました。 >A10以降に、今回処理対象ブックのフルパスを羅列して こんなカンジでしょうか? D:¥temp¥7月¥*ABC_PL.*.xls* を A10セル D: A11セル ¥temp A12セル ¥7月 A13セル ¥*ABC_PL.* A14セル .xls* >その中から、A4セルの条件に一致するブックが何個あるか探す。 A4セル・・・D:¥temp¥7月¥*ABC_PL.*.xls* =COUNTIF(A4,"*"& A10& "*"& A11 &"*"& A12& "*" & A13 & "*" & A14 & "*" ) セルを分けた分だけ5とか、でてくれるのかなと思っていたのですが1でした。。 イメージから間違っていますか? (ミニー) ---- >こんなカンジでしょうか? あ〜〜、済みません。 「今回処理対象ブック」ってのは 7月ABC_PL総務課.xls 7月ABC_PL経理課.xls 7月ABC_PL開発課.xls・・・ のつもりでした。 これのフルパスなので、前に全部「D:¥temp¥7月¥」がつきます。 って事です。 Dir(CopyPath & "¥*" & Buf & "*.xls*") この時、どのブック達が検索対象に成っているか? と言うと、「CopyPath & "¥"」のフォルダに中に入っているブック達です。 ですから、これらをひとまず A10セル以降に書き出してみて下さい。 検索するワードは「CopyPath & "¥*" & Buf & "*.xls*"」と、フルパスなので A10セル以降にブック名を書き出す時も フルパスで書き出してください。 (HANA) ---- >これのフルパスなので、前に全部「D:¥temp¥7月¥」がつきます。 こちらこそお手数おかけしてすみません。 A10セル D:¥temp¥7月¥7月ABC_PL_人事課.xls A11セル D:¥temp¥7月¥7月ABC_PL_総務課.xls A12セル D:¥temp¥7月¥7月ABC_PL_開発課.xls A13セル D:¥temp¥7月¥7月ABC_PL_技術課.xls A14セル D:¥temp¥7月¥7月ABC_PL_経理課.xls A15セル D:¥temp¥7月¥7月ABC_PL.xls >検索するワードは「CopyPath & "¥*" & Buf & "*.xls*"」と、フルパスなので =COUNTIF(A10:A15,CopyPath & "¥*" & Buf & "*ABC_PL.xls*") 答えは0でした。 A15セルだけを認識させるように工夫が必要ということですよね。 (ミニー) ---- えっと。。。 >CopyPath & "¥*" & Buf & "*.xls*" この記述は、コード内での記述ですが? 関数の引数ダイアログボックスを表示して、確認してください。 数式の入っているセルをアクティブにして、 数式バーの左側に有る [fx] ボタンを押してください。 検索条件の方に #NAME? エラーが出ていると思います。 検索条件が、ループ処理中にどの様なワード(文字列)に成るか ワークシート上でシミュレートしてますよね? 簡単に何がどうなっているか確認出来ると思ったので ワークシートの各セルを使っていますが それが混乱の元なのかな。。。? コードをシート上に置き換えて考えてみてくださいね。 今何をやっているか、分かっていますか? それが分からない事には、何をやっても ただ手を動かしているだけに成っちゃうので。。。 急いで返信していただくよりも、ご自身の中で整理をつけた上で 返信していただく方が良いと思います。 (HANA) ---- >CopyPath & "¥*" & Buf & "*.xls*" >この記述は、コード内での記述ですが? 知識がないばっかりに 検索するワードは「CopyPath & "¥*" & Buf & "*.xls*"」と書いてあったので わたしもこれでできるのかな??と思いながらもやってしまいました。 すみません。 >今何をやっているか、分かっていますか? A10以降に、今回処理対象ブックのフルパスを羅列して その中から、A4セルの条件に一致するブックが何個あるか探す。 というのをやっていたつもりなんですが・・・ =COUNTIF(A10:A15,"=*ABC_PL.xls") で、1という答えができました。 A15セルのD:¥temp¥7月¥7月ABC_PL.xls を探してくれたんだと思うのですが どうでしょうか? (ミニー) ---- ご自身で >A4セルの条件に一致するブックが何個あるか探す。 と書いておられるじゃないですか。 作る式は =COUNTIF(A10:A15,A4) ですよね? ‾‾検索条件は、A4セルに表示されている文字 A4セルに「=*ABC_PL.xls」と表示されていますか? >A4セルがD:¥temp¥7月¥*ABC_PL.*.xls* ですよね? 難しく考えなくて良い様に、数式にしてワークシート上に展開しているので やさしく、やさしく 考えてみて下さい。 (HANA) ---- 何度も理解できずすみません。 >A4セルがD:¥temp¥7月¥*ABC_PL.*.xls* でもやってみたのですが、Countifの結果が0になってしまい 1にするために必死でした(--;) でもよく考えてみたら0になってよかったんですよね? =COUNTIF(A10:A15,A4 ) A4にはD:¥temp¥7月¥*ABC_PL.*.xls*が入っています。 答えは0だったので、A4セルの条件に一致するブックがないという結果になりました。 自分なりに考えてA4セルを D:¥temp¥7月¥*ABC_PL.xls に変えてみたら 一致するブックが1となりました。 (ミニー) ---- >でもよく考えてみたら0になってよかったんですよね? そうです。 これが「0」になるから、エクセルは「D:¥temp¥7月¥7月ABC_PL.xls」が見つけられず > "ABC_PLのファイルがありません。続行しますか?" と片方だけ メッセージを出しているわけです。 ミニーさんは「有る」と思っていて エクセルは「無い」と言っています。 この溝を埋めないと、エクセルは思った様に動いてはくれません。 A15セルに「D:¥temp¥7月¥7月ABC_PL.xls」と入っています。 比較しやすい様に、そのすぐ下のA16セルに A4セルをコピーして値貼り付けして下さい。 A16セルは「D:¥temp¥7月¥*ABC_PL.*.xls*」に成りますね。 そこで、今ワイルドカード「*」が使って有る所を 実際の文字に直してみて下さい。 「*」は、【何か文字】或いは[何もなし]のいずれかです。 最初の*は、7月のブックなので「7月」ですね。 最後の*は 今回は拡張子が xls なので 何も無し(単に削除)ですね。 真ん中の*は? すべての「*」を直した時、A15セルと同じに成りますか? 変更して良いのは「*」だけですので、他の所まで変更してしまわない様 気をつけて作業にあたってください。 (HANA) ---- > "ABC_PLのファイルがありません。続行しますか?" と片方だけ >メッセージを出しているわけです。 Countifに必死で、この原因を探るためにやっていることを忘れてました… >A16セルは「D:¥temp¥7月¥*ABC_PL.*.xls*」に成りますね。 はい。 >真ん中の*は? ABC_PL.* →ここですよね。 7月ABC_PL.xlsというブックだけにしたいので、*削除してよかったでしょうか? >すべての「*」を直した時、A15セルと同じに成りますか? A15セル 「D:¥temp¥7月¥7月ABC_PL.xls」 A16セル 「D:¥temp¥7月¥ABC_PL..xls」 同じにならなかったです。*を削除したA16セルは 7月とブック名の間に¥があるのと、xlsの前にドットが二つあります。 これであってますでしょうか? (ミニー) ---- >Countifに必死で、この原因を探るためにやっていることを忘れてました… それはいけませんね。^^; 今回は、こちらが主導的に成っているので仕方ないかもしれませんが 今後も上手く行かなかった時は、こんな感じで 別の手法を使って 原因を特定出来ると、問題も早く見つかるんじゃないかと思います。 その際は、くれぐれも 目的をお忘れに成りません様に。 >A16セル 「D:¥temp¥7月¥ABC_PL..xls」 ちょっと意図が伝わっていなかった様です。 或いは、単純に間違っておられるのか? ◆「*」部分で何を表したかったのか? を考えてみてください。 >最初の*は、7月のブックなので「7月」ですね。 >最後の*は 今回は拡張子が xls なので 何も無し(単に削除)ですね。 と書きましたが。。。。 「D:¥temp¥7月¥*ABC_PL.*.xls*」 最初の「*」は、処理をする月によって 何月 と成っているか分からないですね。 だから、コード内では曖昧にしています。 でも、今回の例でミニーさんが意図したのは「7月」と言う文字ですよね? ですから、最初の「*」は「7月」と言う文字に置き換えてください。 最後の「*」は・・・ エクセル2007以降は 拡張子が「xlsx」又は「xlsm」に変わりました。 今は互換モードで保存してあって、拡張子は「xls」のままの様ですが。 ブックの拡張子が「xls」「xlsx」「xlsm」のどれでも、どれかで有れば対象に成る様 最後の所もやはり曖昧にしています。 今回の例では、拡張子は「xls」なので、最後の「*」は削除してください。 もしもフォルダに有るブックが「xlsx」だったら、最後の「*」は「x」に 「xlsm」だったら、最後の「*」は「m」に 変更してみてもらうことに成ります。 真ん中の「*」は、今回特に何も無いので 削除で合ってます。 このように変更した時に、A16セルの値がA15セルと同じに成る様に 元の数式を変更しないといけません。 ただし、好き勝手に変更すれば良い訳ではなく 意図したブックだけ対象に、その他のブックは対象外に 成る様に気をつけて変更しないといけません。 (HANA) ---- >その際は、くれぐれも 目的をお忘れに成りません様に。 はい、目的を見失わないようにとりくみます(><) >ちょっと意図が伝わっていなかった様です。 すみません…下のお返事みて意図が理解できました >最後の*は 今回は拡張子が xls なので 何も無し(単に削除)ですね。 拡張子のこと全然考えてなかったです。 いま2003を使用していますが、来年ぐらいは2007か2010を使用する予定です。 そのためのxls*だったんですね! >ですから、最初の「*」は「7月」と言う文字に置き換えてください。 >最後の「*」は・・・ 最初の*は7月に変えて、拡張子の*は削除しました。 そうするとA15セルとA16セルは「D:¥temp¥7月¥7月ABC_PL.xls」 同じになりました。 >このように変更した時に、A16セルの値がA15セルと同じに成る様に >元の数式を変更しないといけません。 元の数式とは、 A4セル =A1 & "¥*" & A2 & "*.xls*" のところでしょうか? (ミニー) ---- >来年ぐらいは2007か2010を使用する予定です。 すべてのパソコンで置き換わるのでしょうか? xlsx・xlsmで保存すると、2003以前のエクセルでは開けなくなります。 「自分のパソコンのエクセルが変わったから〜」で拡張子を変えてしまうと 他の方から「開けないじゃない!」って言われてしまいますので、注意してください。 A4セルに入っている数式が >=A1 & "¥*" & A2 & "*.xls*" であれば >そうするとA15セルとA16セルは「D:¥temp¥7月¥7月ABC_PL.xls」 >同じになりました。 なりません。 再度書きますが 変更して良いのは「*」だけですので、他の所まで変更してしまわない様 気をつけて作業にあたってください。 完成品(A15セル)を見ながら修正すると どうしても「近づけたい」と言う思いが有るので うっかり間違ったことをしてしまいます。 よく考えてください。 「*」を置き換えて一致するなら COUNTIF関数で数えた時点で「0」に成るのはおかしいですよね? それは、書き込む前に考えてくださいね。 それで 「一致したのに、COUNTIF関数が0なのは何で?1に成らないとおかしいよね」 と少しでも思ったのなら、それは一緒に書いてください。 この様な掲示板では、いろいろなやりとりが有ると思いますが 応答の中でも、大きく二つに分けられると思います。 一つは、こちらで状況が分からないのでそれを確認する為のやりとり。 この場合は、「○○してください」「○○はどうなっていますか?」 の書き込みを 忠実に実行し、ありのままを答えてもらう必要が有ります。 リンクの更新が必要か・不要かの話をした時のやりとりがこれに当たると思います。 もう一つは こちらで問題点は分かっていて ご質問者さんが分かっていない時 その問題点を分かってもらうためのやりとりです。 この場合の目的は、やった結果を教えてもらうことではなく やった事からご自身で考え、結論にたどり着いてもらう事です。 分かっているのに答えを出さないのは意地悪かもしれませんが 出来るだけ直球を投げているつもりですので 脇見をせずに受け止めて、そのボールを良く観察して貰えればと思います。 (HANA) ---- >すべてのパソコンで置き換わるのでしょうか? はい、全社員一斉に変わると思います。 >変更して良いのは「*」だけですので、他の所まで変更してしまわない様 A16セルは「D:¥temp¥7月¥*ABC_PL.*.xls*」はA4セルの値コピーで 最初の「*」は「7月」と言う文字に置き換え 最初の*を7月にして、残りの2つは消しました。 拡張子の前のドットが2つ??でしょうか >COUNTIF関数で数えた時点で「0」に成るのはおかしいですよね? そうですよね A15ではCountifは「1」になりますが A16では「0」でした。よくみたら、小さいのですがドットがありました >脇見をせずに受け止めて、そのボールを良く観察して貰えればと思います。 はい、がんばります。 (ミニー) ---- >はい、全社員一斉に変わると思います。 すごいですね〜。 それなら問題なさそうですが、もしも他のマクロで ブックの拡張子として"xls"を使っている物があったら 使えなくなりますので、その辺りも一応確認してみてくださいね。 >よくみたら、小さいのですがドットがありました そうなんです。 小さいですが、それが曲者です。 すると、どこを直すのが良いですかね。。。 いっその事 >Private Const 年間L As String = "損益計算書まとめ,海外拠点まとめ" で、拡張子まで含めて指定するか 海外拠点まとめの方も「.」を含む形にして"*.xls*" の「.」をなくすか。。。 (HANA) ---- >すごいですね〜。 やっとですよぉ…いまだXPですし…。 でも一斉にやるのは来年以降の話だと思います。 >ブックの拡張子として"xls"を使っている物があったら >使えなくなりますので、その辺りも一応確認してみてくださいね。 はい、今のうちに見直しておきます。 >小さいですが、それが曲者です。 それだったんですね。 わたしが間違えて打ったのかと思っていました(--;) >Private Const 年間L As String = "損益計算書まとめ,海外拠点まとめ" >で、拡張子まで含めて指定するか 月を省いたブック名になりますか? 私はその方がわかりやすいでしょうか。 >海外拠点まとめの方も「.」を含む形にして"*.xls*" の「.」をなくすか。。。 どちらがいいのでしょうか(??) (ミニー) ---- >月を省いたブック名になりますか? そうですね。 最初の「月」の所と 最後の「-,x,m」の所は まだ特定出来ませんので。 >どちらがいいのでしょうか(??) なんともいえません。 「海外拠点まとめ」の方のブック名が実際はどの様に成っているのか 分かりませんので。 前回の様な事もありますしね。 現実問題としては、 ・後で見た時にわかりやすいもの ・メンテナンスが簡単なもの と考えていってどうするか決めていけば良いと思います。 後から「あ〜、こうやっとけばよかった」と思った場合でも そうなったら それはそれで、一つの良い選択だったと思います。 (HANA) ---- >「海外拠点まとめ」の方のブック名が実際はどの様に成っているのか 海外拠点まとめのブック名ですが 7月海外別日本別PL&CR.xlsという名前です。 >・後で見た時にわかりやすいもの ・メンテナンスが簡単なもの はい、こんな私でもわかるものにしたいのですが、 部署毎のブック以外のブックも、"海外別"、"日本別"という言葉が 使われているものもあるので、そのブックを指定という形がいいのでしょうか。 (ミニー) ---- >部署毎のブック以外のブックも、"海外別"、"日本別"という言葉が >使われているものもあるので、そのブックを指定という形がいいのでしょうか。 どうなんでしょうね? 具体的にどの様に指定しようとしておられるのか。 他のブック名がどの様に成っているのか。 今後ブック名がどの様に変化することが考えられるのか。←ここが一番重要だと思います。 それらが分からないので、何ともいえません。 検索を曖昧にすると言う事は、対象ブック名の変化に柔軟に成る分 対象外ブック名の変化にはシビアに成ると思います。 「"月"部分は毎月絶対変わるけど、他の所は変わる予定はないし 変わったらその時に変えれば良いや。 他のブックに変更が有った時にいちいち気にするより良いよね。」 と言う結論も、今の段階では選択肢の中に有って良いと思います。 年間ブックが増えた場合・部門ブックのシートで新しい処理が増えた場合 コードの変更は必須に成ってくると思いますので。 どうしても不可解なのが、このマクロがマクロ用ブックに有るのなら その内の一枚を作業用シートとして使っても 何の問題も無い様に感じるのですが。。。? 今は、シート上に数式で作っているので どんなワードだったら目的のブックだけが対象に成るのか その指定の場合、他のブックをどの様なブック名にするのが駄目なのか。 色々やってみられるのが良いとおもいます。 (HANA) ---- >今後ブック名がどの様に変化することが考えられるのか。←ここが一番重要だと思います。 ブックを管理している人には、ブック名は絶対に変えないという条件で これを作成いただく前に約束してもらいました。 >コードの変更は必須に成ってくると思いますので。 そうですよね。。 それが一番怖いのですが・・・ >どうしても不可解なのが、このマクロがマクロ用ブックに有るのなら >その内の一枚を作業用シートとして使っても 何の問題も無い様に感じるのですが。。。? マクロ用のブックでしたら、作業用シートとして使えます。 いま作業のシートは何も使ってなくてあいています。 もしかしたら、対象のブックと間違えてお答えしていたら申し訳ございません(><) 状況変わりますでしょうか。 >どんなワードだったら目的のブックだけが対象に成るのか >その指定の場合、他のブックをどの様なブック名にするのが駄目なのか。 はい、ブック名はある程度こちらで決められるので 対象の部署毎、対象外のブック、今のまま名前の変更しないようにしてもらっています。 (ミニー) ---- >状況変わりますでしょうか。 いや、大して変わらないですが これまでのお話の中で シートに情報を持たせておいたら? と言う提案をしましたが 上司が駄目だって言うんで、出来ません。 とお返事をもらっていたので。 その時も「マクロ用ブックのシートなら関係ないでしょ?」と思いましたが。 今シートに書いておく利点は マクロが敷居が高いと思っている人でも変更出来る 点だと思います。 変更しないと約束が出来ていても どうしても変更せざるを得ない事も有ると思います。 その時に、使用者が簡単に変更出来る様にしておけば たびたび呼ばれなくて済む と言った程度の事の様にも思えます。 処理の内容が変わるのは、どうしても マクロを開いての変更が必要だと思います。 ブック名・シート名が変わるだけなら、シートに書き出しておけば マクロを開く必要は無くなりますよね。 敷居が低い分「うっかり」とか「分からないまま」に変更されて 動かなく成る危険性は有ると思いますが。 このマクロは、増殖して行く様な物ではないので そんなに気にしなくてもよさそうにも思えます。 (HANA) ---- >上司が駄目だって言うんで、出来ません。 多分、既存のブックと勘違いしていたんだと思います。すみません! マクロ用のブックなら、私とその作業をする人の2人しかみないので 全然大丈夫です >マクロが敷居が高いと思っている人でも変更出来る点だと思います。 ぜひやってみたいと思っていますが、シートにどのようなことを書くのでしょうか? イメージできなくてすみません。。。 それと自分でこの2箇所変えてみました 以前でていたような「ファイルがありません」というメッセージは でず、 最後まで終わったみたいです。 大丈夫でしょうか? あのドットを追加して、*xls*にしてみました。 Private Const 年間L As String = "ABC_PL.,海外別日本別PL&CR." MyFName = Dir(CopyPath & "¥*" & Buf & "*xls*") (ミニー) ---- >多分、既存のブックと勘違いしていたんだと思います。すみません! いや、特に「どのブックの」とは言っていなかったので。。。 >それと自分でこの2箇所変えてみました 大丈夫だと思います。 その様に修正して実際のコードを動かしてみてください。 (HANA) ---- >その様に修正して実際のコードを動かしてみてください。 今朝からコードを動かして検証しております。 部署毎のブックで1つだけ、リンクの更新、値貼り付けなど何もされて いないブックがありました。 私のせいなんですが、 もしかしたらブック名が似てるのが原因でしょうか・・・ 作業をしてもらいたい部署毎のブックは 7月ABC_PL_管理課_客先別売上.xls Private Const 年間H As String = "客先別売上表,レート一覧" 除外ファイルは、ABC_PL客先別売上表.xlsです "客先別売上"という文字がかぶっています・・・ 違う原因だったらすみません。 (ミニー) ---- たぶん、それでしょうね。 実際のデータが分からないままに作成すると、こういった事が良く有ります。 そして、私はそれが嫌なので、何度か「実際のブック名を〜」と書いたと思います。 良い機会ですので、ご自身で修正してみてください。 完成したコードを見るより、ミニーさんの力になると思います。 色々やってみて、どうしても上手く行かない場合は このスレはもう長くなってしまったので、続きのスレにしてください。 その際、先頭に最新コード(現状の1ブック以外は希望通りに動くコード)と 実際のブック名(固有名詞がある場合はそこは変更してください)を あわせて載せてください。 (HANA) ---- >良い機会ですので、ご自身で修正してみてください 昨日一日ファイル名を変えたりしてみたのですが、状況は変わらず そのファイルだけ。というのがとても不思議です。 同じような問題がシート名に、もあり そこを含め、もう一度ちゃんと見直してみたいと思いますので 月曜日まとめてご報告いたします そこ以外は、かなり処理が早くなっていて感動しました(^^) (ミニー) ---- >たぶん、それでしょうね。 って書きましたが、違うかもしれないですね。。。 それ以外の可能性も含めて 一行ずつ実行しながら、確認してみてください。 (HANA) ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201207/20120725222144.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97054 documents and 608269 words.

訪問者:カウンタValid HTML 4.01 Transitional