advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 384 for フォルダ ブック シート 転記 (0.038 sec.)
フォルダ (4447), ブック (11580), シート (35664), 転記 (4285)
[[20130708214606]]
#score: 8791
@digest: 47bd47389b8e1d89bf5049298f87d5ce
@id: 62893
@mdate: 2013-07-21T12:27:27Z
@size: 74904
@type: text/plain
#keywords: 程表 (229095), 細工 (173378), 戦4 (171775), s960600148 (151483), 注・ (138246), linkstr (127229), 注デ (126840), myca (122002), 工程 (112122), 表ブ (109188), 注入 (106463), 事番 (106007), mybkn (105494), 荷da (105377), 発注 (87905), 入荷 (77614), 荷デ (60687), 工事 (41611), ・入 (39007), 苦戦 (37765), 詳細 (36312), mypath (29403), 日目 (27094), 注番 (26595), 転記 (23877), 受注 (15384), 部署 (12533), ブッ (12464), 名: (11930), tbl (11892), xlsm (9861), デー (9374)
『フラグのついたデータを別シート転記したい(2) 』(苦戦4日目) 前回の投稿が長くなってしまったのでこちらに続きを書きます。 [[20130630165805]] 今、下のようになっています。 セル番地は以下の通りです。 HANAさんが教えてくださったSchedule4()を見てやっているのですが、 エラーばかりで非常に難しく参っています。 以下の状況でやっていることは合っていますでしょうか? MyPath = "C:¥Users¥Desktop¥工程表20130706" MyBkn = "02_工番_原本.xlsm" Workbooks.Open Filename:=MyPath & "¥" & MyBkn Call 転記2(MyC2A, tbl, i, MyBkn) Const SOFR As Long = 3 Const SRC As Long = 8 MyC2A = Array("", "E10", "A5", "A3", "", "F3", "", "A6", "A7", "E6", "A4", "E4", "E5", "", "", "", "G10") 'A B C D E F G H I J K L M N O P Q >ただフォルダ名が「H25」ってのがついているので >別の書き方をした方がよさそうですね。 H25はまずいのですね?? フォルダ名等は絶対にコレというのはなく、 今、自分が思ったままにやってしまっています。 (ここまでは大丈夫だなと思ったらコピーして名前を変えて次のステップに進んでやっているので、どんどんフォルダが増えてしまっている状況なのです…) 今回作成しているものはすべて1つのフォルダに入れて管理しようと思っているのですが、 まずいのでしょうか? 今のフォルダの状況は以下のようになっています。 ブック 詳細工程表の原本 ブック 工程表 ブック 工程表のCSV フォルダ 詳細工程表(フォルダにして工事番号の名前の付いたブックを入れる) 今からまた考えながら進めてみたいと思います。 またご報告に参りますのでよろしくお願いいたします。 (苦戦4日目) ---- リンクになっていないようで申し訳ありません。 (苦戦4日目) ---- リンクしました。 ---- ありがとうございました!(苦戦4日目) ---- >H25はまずいのですね?? いや、別にまずくはないのですが たとえば、コード内に MyPath = "C:¥Users¥Desktop¥工程表H25" って書いたとしますね。 次の年(年度?)になったら この部分は MyPath = "C:¥Users¥Desktop¥工程表H26" に書き換えないといけないです。 またその次の年になったら。。。 毎年この部分を書き換えないといけないのが「よくない」です。 前回紹介した過去ログで使ってますが MyPath = ThisWorkbook.Path & "¥" & Range(RngA(2)).Value ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ この部分が 「マクロが入っているブックが保存されている場所」になります。 > ブック 工程表 にマクロが入っているなら、詳細工程表の原本(ブック名:02_工番_原本.xlsm)は MyPath = ThisWorkbook.Path MyBkn = "02_工番_原本.xlsm" Workbooks.Open Filename:=MyPath & "¥" & MyBkn で開けます。 今は H25フォルダの中に ブック 詳細工程表の原本 ブック 工程表 ブック 工程表のCSV フォルダ 詳細工程表 が入っていると思いますが 次の年になって、H26フォルダの中に ブック 詳細工程表の原本 ブック 工程表 をコピーしてもらうと、コードの変更なしに H26フォルダの 詳細工程表の原本ブックを開けます。 詳細工程表の原本ブックが 年のフォルダ分ある事になるってのが 「何が原本?」って感じもありますが。 その他の方法としては、どこかの日付から何年のものかを特定するのだと思いますので それらを見ながら保存場所を決めて行っても良いと思いますけどね。 ちなみに、部署ごとのシートは 何件目の転記か?によって転記先のセル番地が変わりましたよね。 そのセル番地を計算するために Const OFR As Long = 7 Const RC As Long = 5 ってのを設けたのですが、詳細工程表へは 一か所ずつしか転記しませんよね? あとは、どこのパーツが出来てますか? 「○」を「転記済」にするコードは出来てる風な印象でしたが。。。? (HANA) ---- フォルダの件ありがとうございました。 確かに毎年書き換えたりするのは、ちょっとやりたくないです。 なるべく楽が出来る方法に変えていこうと思います。 Const OFR As Long = 7 Const RC As Long = 5 ってのを設けたのですが、詳細工程表へは 一か所ずつしか転記しませんよね? 一か所ならいらないのですね。 ここからここの〜という意味なのかと思ってしまいました。 ここを削り以下のようになっております。 しかし★部分でMyCA=Empty値になってしまいます。 MyPath = "C:¥Users¥Desktop¥工程表20130706" MyBkn = "02_工番_原本.xlsm" Workbooks.Open Filename:=MyPath & "¥" & MyBkn Call 転記2(MyC2A, tbl, i, MyBkn) MyC2A = Array("", "E10", "A5", "A3", "", "F3", "", "A6", "A7", "E6", "A4", "E4", "E5", "", "", "", "G10") 'A B C D E F G H I J K L M N O P Q With Sheets("転記") tbl = .Range("A1:Q" & .Range("A" & Rows.Count).End(xlUp).Row).Value End With If tbl(i, 1) = "転記済" Then Call 転記2(MyCA, tbl, i, StR) End If ---------------------------------------- Sub 転記2(ByVal MyCA As Variant, ByVal tbl As Variant, ByVal MyR As Long, ByVal MyBkn As String) Dim i As Long For i = 0 To UBound(MyCA, 1) ★MyCA=Empty値 If MyCA(i) <> "" Then Workbooks(MyBkn).Sheets(1).Range("A1").Range(MyCA(i)).Value = tbl(MyR, i + 1) End If Next End Sub --------------------------------------- また、「○」を「転記済」にするコードは、 処理が終了しましたの後に以下の通り追記しました。 For i = 2 To 100000 If Cells(i, 1) = "○" Then Cells(i, 1) = Replace(Cells(i, 1), "○", "転記済") End If Next i (苦戦4日目) ---- まずはこんな所ですかね。 エラー処理を入れていないので 何かしてるとすぐにエラーが出て止まると思いますので。。。。 その都度対策ですね。 原本ブックシート名が何になっているかわからないので 左端のシート転記する様にしてます。 '------ Sub Schedule5() Dim i As Long, ii As Long Dim DtR As Long, StR As Long, MyCnt As Long Dim msgR As Long, msgC As Long Dim tbl As Variant, MyCA As Variant, MyC2A As Variant, msgA As Variant Dim msg As String, MyPath As String, MyFol As String Const OFR As Long = 7 Const RC As Long = 5 msgA = Array("D2", "I2", "K2") MyCA = Array("", "I7", "A9", "A7", "", "D7", "", "A10", "A11", "D10", "A8", "D8", "D9", "", "", "", "J7") 'A B C D E F G H I J K L M N O P Q Const GpBkN As String = "02_工番_原本.xlsm" MyFol = "詳細工程表" MyC2A = Array("", "E10", "A5", "A3", "", "F3", "", "A6", "A7", "E6", "A4", "E4", "E5", "", "", "", "G10") 'A B C D E F G H I J K L M N O P Q With Sheets("転記") tbl = .Range("A1:Q" & .Range("A" & Rows.Count).End(xlUp).Row).Value msgR = Range(msgA(0)).Row For i = msgR + 1 To UBound(tbl, 1) If tbl(i, 1) = "○" Then For ii = 0 To UBound(msgA, 1) msgC = Range(msgA(ii)).Column msg = msg & vbLf & vbTab & tbl(msgR, msgC) & ":" & vbTab & tbl(i, msgC) Next MyPath = ThisWorkbook.Path & "¥" & MyFol & "¥" & tbl(i, 4) & ".xlsm" MyCnt = Application.CountIf(Sheets(tbl(i, 16)).Range("A:A"), tbl(i, 4)) If MyCnt > 0 Then '◆データがすでにあった場合 If MsgBox("転記済みデータです。" & msg & vbLf & _ "上書きしますか?", vbYesNo) = vbYes Then '詳細工程表 Workbooks.Open Filename:=MyPath Call 転記2(MyC2A, tbl, i, Dir(MyPath)) Application.DisplayAlerts = False ActiveWorkbook.Save ActiveWorkbook.Close Application.DisplayAlerts = True '部署別シート DtR = Application.Match(tbl(i, 4), Sheets(tbl(i, 16)).Range("A:A"), 0) StR = DtR - OFR Call 転記(MyCA, tbl, i, StR, MyPath) '上書き済 .Range("A" & i).Value = "上書済" End If Else '◆データがまだ無かった場合 If MsgBox("新規データです。" & msg & vbLf & _ "登録しますか?", vbYesNo) = vbYes Then '詳細工程表 Workbooks.Open Filename:=ThisWorkbook.Path & "¥" & GpBkN Call 転記2(MyC2A, tbl, i, GpBkN) Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=MyPath ActiveWindow.Close Application.DisplayAlerts = True '部署別シート DtR = Application.Max(OFR, Sheets(tbl(i, 16)).Range("A" & Rows.Count).End(xlUp).Row) StR = Int((DtR - OFR + 1) / RC) * RC Call 転記(MyCA, tbl, i, StR, MyPath) '転記済 .Range("A" & i).Value = "転記済" End If End If End If msg = "" Next End With ThisWorkbook.Save MsgBox "処理が終了しました。" End Sub '------ Sub 転記(ByVal MyCA As Variant, ByVal tbl As Variant, ByVal MyR As Long, ByVal StR As Long, ByVal MyPath As String) Dim i As Long For i = 0 To UBound(MyCA, 1) If MyCA(i) <> "" Then If i = 3 Then Sheets(tbl(MyR, 16)).Range("A1").Offset(StR).Range(MyCA(i)).Value = "=HYPERLINK(""" & MyPath & """,""" & tbl(MyR, i + 1) & """)" Else Sheets(tbl(MyR, 16)).Range("A1").Offset(StR).Range(MyCA(i)).Value = tbl(MyR, i + 1) End If End If Next End Sub '------ Sub 転記2(ByVal MyCA As Variant, ByVal tbl As Variant, ByVal MyR As Long, ByVal MyBkN As String) Dim i As Long For i = 0 To UBound(MyCA, 1) If MyCA(i) <> "" Then Workbooks(MyBkN).Sheets(1).Range("A1").Range(MyCA(i)).Value = tbl(MyR, i + 1) End If Next End Sub '------ MyCA とか MyC2A とか、は 変数です。 変数ってのは「入れ物」だと思ってください。 使う時は 入れ物の中に入っているもの を使います。 だから、使わせるときまでに 使わせたいものを 変数の中に入れておかないといけません。 箱の中に物を入れる ってのが、例えば MyC2A = Array("", "E10", "A5", "A3", "", "F3", "", "A6", "A7", "E6", "A4", "E4", "E5", "", "", "", "G10") にあたります。 だから、 Call 転記2(MyC2A, tbl, i, MyBkn) で使う前までに 入れておかないといけません。 (HANA) ---- HANAさん、ばっちり理想通りに動きました!!! 変数についても教えていただいてありがとうございます。 その変数、箱の中に物を入れる書き方なのですが、 次の段階で、作成済みの工事番号の詳細工程表のセルに日付が入っていたら、 部署別シートの指定のセルにその日付を転記するということをしたいのです。 今度は逆の転記になるわけですが、Sub Schedule5()の'◆データがすでにあった場合の後に、 すでにあるならこのセルを見て、部署別に転記とするのでしょうか? また、「箱に物を入れる」部分はABCD…みたいにきれいに並んでいない 以下のような転記でも同じやり方でしょうか? 詳細工程表のE11に日付が入っていたなら部署別のI9に転記 以下同じようにF15→J9 E21→I10 F21→J10 E25→I11 f25→J11 ご教示よろしくお願いいたします。(苦戦4日目) ---- >今度は逆の転記になるわけですが と、同じ「転記」ですが、話の流れとしては 「詳細工程表の特定のセルに日付を入れたら 転記」 するので、Schedule5にその作業を入れるのは話がおかしくないですか? Schedule5は、「転記シートにデータを作ったら 転記」するコード ですよね? (HANA) ---- HANAさま よくわかっていなくて申し訳ありません。 部署別シート(5枚)にボタンを付けてそこに、 A7、A12、A17の工事番号のリンク先(詳細工程表)を見に行き、 特定のセルに日付があれば部署別シートのセルに転記するコードを付ければいいのかな? と思ったのですが、間違ってますでしょうか?? もしそうでしたら最初に教えていただいた以下のコードを応用すればいいでしょうか? Sub Schedule() Dim i As Long, ii As Long Dim MxR As Long, MyR As Long, MyCnt As Long Dim MyCell As String Dim tbl As Variant, MyCA As Variant Const OFR As Long = 7 Const RC As Long = 5 MyCA = Array("", "", "A8", "", "", "E7", "", "A9", "A10", "D10", "F11", "D8", "D9", "", "", "A7", "") 'A B C D E F G H I J K L M N O P Q 色々申し訳ありませんがご教示お願いいたします。 (苦戦4日目) ---- えっと。。。 >今度は逆の転記になるわけですが、Sub Schedule5()の'◆データがすでにあった場合の後に、 >すでにあるならこのセルを見て、部署別に転記とするのでしょうか? ってのは、転記シート→部署別シート・詳細工程表ブック の処理をしている最中に 詳細工程表ブック転記シート・部署別シート の処理をする って事ですよね? その次の >部署別シート(5枚)にボタンを付けてそこに、 >A7、A12、A17の工事番号のリンク先(詳細工程表)を見に行き〜〜 でしたら、また違った話の様にも思えます。 私が思ったのは もともとは、データをどこかからCSVで落してきて 転記.xlsm(←ブック名がわからないので。Schedule5マクロがあるブックの事です) にデータを取り込み、加工して転記シートに移動。 Schedule5マクロを実行して ・各部署ごとのシートにデータを転記 ・工事番号毎に詳細工程表ブックを作成 その後、誰がどのタイミングで行うのかわかりませんが 詳細工程表ブックに日付を入力する人がいる。 その日付を、転記.xlsmにも入るようにしたい。 って事ですよね? でしたら、詳細工程表ブックに日付を入力した時に 転記.xlsmにも入れるのが無駄のない動きだと思いますが。 今のご説明だと 入力されているかされていないかわからないけど 該当部署の担当の詳細工程表ブックをすべて確認し 日付データを上書きする。 と言う設計の様に感じます。 後は、何度も書いてますが 詳細工程表ブックを作った時点で、参照先のセルは決まるので 数式を入れておいても良いんじゃないかと思います。 詳細工程表ブック転記ブック って流れになりますが。 (HANA) ---- また変なことを言ったようです…申し訳ありません。 もう私では求められていることが厳しすぎて、 会社の人に相談したところ、過日の2案が出たもので… そっくりそのままお伺いしてみたのです。本当にすみません。 >もともとは、データをどこかからCSVで落してきて >転記.xlsm(←ブック名がわからないので。Schedule5マクロがあるブックの事です) >にデータを取り込み、加工して転記シートに移動。 >Schedule5マクロを実行して >・各部署ごとのシートにデータを転記 >・工事番号毎に詳細工程表ブックを作成 >その後、誰がどのタイミングで行うのかわかりませんが >詳細工程表ブックに日付を入力する人がいる。 >その日付を、転記.xlsmにも入るようにしたい。 >って事ですよね? HANAさんのおっしゃる通りです。 そういう事がしたいのです! ブック名は工程表.xlsm 詳細工程表のブックに日付を入れるのは各々の作業なのでいつ入るかは不明なのですが、 それを反映させたいのです。 > 詳細工程表ブックを作った時点で、参照先のセルは決まるので >数式を入れておいても良いんじゃないかと思います。 こちらについて教えていただきたいのですが、 各部署ごとのシートのセルに詳細工程表のセルの値を参照する数式を入れるということでしょうか? 調べたのですがINDIRECTだとブックを閉じたまま値を参照できないようなのですが、 HANAさんがおっしゃっておられるのはどういうことなのか、 申し分かりませんが詳しく教えていただけないでしょうか? よろしくお願いいたします。 (苦戦4日目) ---- 簡単に言うと 部署毎シートの工事番号の所は、ハイパーリンク関数をコードが入れてますよね。 ハイパーリンク関数じゃなくて、IF関数を入れる。 って事です。 例えば、A1セルの値をB1セルに参照させるとき A1セルが未入力の場合も考慮して =IF(A1="","",A1) って式を入れますね。 ブック間でも同じで =IF(パス[ブック名.xlsm]シート名!A1="","",パス[ブック名.xlsm]シート名!A1) ってセル番地を書くと、指定したセルを参照してくれます。 ので、こんな式を所定のセルにコードが入れる。 って、これ以上「詳しく」ってのも難しいのですが イメージが分かってもらえますか? ブック間参照をする ってリスクは増えますが。 (HANA) ---- >ハイパーリンク関数じゃなくて、IF関数を入れる。 って事です。 それはコードが関数を入れるという事でしょうか? ということはSub Schedule5()の下のコード部分を "=HYPERLINK(""" & MyPath & """,""" & tbl(MyR, i + 1) & """)" =IF([工事番号.xlsm]工程表!$E$11="","",[工事番号.xlsm]工程表!$E$11) にするということでしょうか? >=IF(パス[ブック名.xlsm]シート名!A1="","",パス[ブック名.xlsm]シート名!A1) ↑このパスが分からずにコードを書き換えられず実際に動かせていないのですが、 そうするとリンクはどうなってしまうのですか? 解釈が間違っていたら申し訳ありません。(苦戦4日目) ---- あ〜、ちょっと紛らわしい書き方をしてましたね。 すみません。 IF関数を入れるのは 当然ですが 日付を表示させたいセル の方です。 A7セルはハイパーリンク関数のままです。 あと、そうするなら コードはもう少し変更が必要になります。 とりあえず、手作業で 日付のセルに数式を入れて イメージを確認して貰えると良いと思います。 前スレで書いてもらったサンプルデータで実行すると 詳細工程表フォルダの中に S960600148.xlsm ってブックが出来ると思いますので それを開いてください。 参照させるのは 転記ブックの 工程表_2部200 シートの先頭に、該当のデータが有ると思いますので I10セルに =IF([S960600148.xlsm]工程表!$E$21="","",[S960600148.xlsm]工程表!$E$21) の式を入力。 J10,I11,J11セルにもそれぞれ参照させたいセル番地に変更した式を入れて 上書き保存して下さい。 で、実際の運用に近い事をすると 一旦両方のブックを閉じる S90900148 のブックを開いて、E21セルに日付を入力し 上書き保存して 閉じる 転記ブックを開く と、I10セルに先ほど入力した日付が入っている と言う算段です。 この時、I10セルに入力されている式(文字列)をマクロで作って入れる事に成ります。 前回「直近で似たような事をやった」と紹介したスレが 本当に殆ど同じなので、見てください。 (HANA) ---- HANAさん、ありがとうございます。 教えていただいた通り、詳細工程表に日付を入力し、 工程表の転記させたいセルに関数を入れてみました。 詳細工程表を保存して閉じ、工程表のセルに入力されている式は、 =IF('C: となっています。 >この時、I10セルに入力されている式(文字列) というのはこの=IF('C:のことですか? =IF([S960600148.xlsm]工程表!$E$21="","",[S960600148.xlsm]工程表!$E$21) ↑この関数をコードにするのかと思っていたのですが… で、先程から教えていただいたスレを読んでいるのですが、 同じようなことを教えていただいているのは分かるのですが… 詳細工程表の日付を工程表の方への部分は [[20130618141103]] の'一覧表作成 の部分でしょうか? 何をどうしたらいいのか糸口が掴めず混乱しています… 参考スレを実際に作成して動かしてみたいと思います。。 (苦戦4日目) ---- なかなかまとまった時間が取れないので コードが書けなくてすみません。 >=IF([S960600148.xlsm]工程表!$E$21="","",[S960600148.xlsm]工程表!$E$21) と書けば良いのは S960600148.xlsm が開いている場合です。 開いているうちに処理をするなら、VBAで埋め込む式もこれで良いです。 実際のコードを考えると、詳細工程表は 各部署毎のシート転記する前に閉じているので >=IF('C:〜〜 の様に 閉じたブックを参照する・・・フルパスでセルの指定が必要・・・になります。 現在の Sub 転記 に追加するのは面倒なので もう一つ Sub 詳細工程表を参照 といったコードを作って 呼出して使うのが良いかと思います。 過去ログでは、一旦配列に式を作っているので 少し変わってきますが MyPath = ThisWorkbook.Path & "¥" & Range(RngA(2)).Value LinkStr = "'" & MyPath & "¥[" & MyBkN & "]" & MyShN & "'!" dt(1, 1) = "=HYPERLINK(G" & mxR + 1 & "," & MyN & ")" dt(1, 2) = "=" & LinkStr & RngA(1) dt(1, 3) = "=" & LinkStr & RngA(2) dt(1, 4) = "=IF(" & LinkStr & RngA(3) & "="""",""""," & LinkStr & RngA(3) & ")" dt(1, 5) = "=IF(" & LinkStr & RngA(4) & "="""",""""," & LinkStr & RngA(4) & ")" このあたりになります。 MyPathは、同じ変数名ですが Schedule5 とは中身が違っているので、注意して下さい。 Schedule5の方は MyPath = ThisWorkbook.Path & "¥" & MyFol & "¥" & tbl(i, 4) & ".xlsm" の様にブック名まで入っているので これを MyPath = ThisWorkbook.Path & "¥" & MyFol MyBkN = tbl(i, 4) & ".xlsm" の様にわけて、シート名は MyShN = "工程表" ですよね。 RngA に、詳細工程表のセル番地 もう一つ 変数を追加して 数式を入れるセル番地を指定。 べた書きなので、雰囲気だけですが RngA =Array("E11", "F15", "E21", "F21", "E25", "F25") もう一つA =Array("I9", "J9", "I10", "J10", "I11", "J11") って感じにして Range(もう一つA(i)) = "=IF(" & LinkStr & RngA(i) & "="""",""""," & LinkStr & RngA(i) & ")" で i=0 の時を考えると I9セルに =IF('C:〜¥[S960600148.xlsm]工程表!E11="","",'C:〜¥[S960600148.xlsm]工程表!E11) の式が入る事になります。 すごい駆け足ですみません。 もしかしたら動かないかもしれませんが。。。↓ Sub SAMPLE1() Dim tbl As Variant Dim RngA As Variant, もう一つA As Variant Dim MyFol As String, MyPath As String, MyBkN As String, MyShN As String, LinkStr As String Dim ii As Long With Sheets("転記") tbl = .Range("A1:Q" & .Range("A" & Rows.Count).End(xlUp).Row).Value End With RngA = Array("E11", "F15", "E21", "F21", "E25", "F25") '詳細工程表のセル番地 もう一つA = Array("I9", "J9", "I10", "J10", "I11", "J11") '数式を入れるセル番地 MyFol = "詳細工程表" MyPath = ThisWorkbook.Path & "¥" & MyFol MyBkN = "S960600148.xlsm" '←実際は tblの値を使用する。tbl(i, 4) MyShN = "工程表" LinkStr = "'" & MyPath & "¥[" & MyBkN & "]" & MyShN & "'!" For ii = 0 To UBound(RngA, 1) Sheets("工程表_2部200").Range(もう一つA(ii)) = "=IF(" & LinkStr & RngA(ii) & "="""",""""," & LinkStr & RngA(ii) & ")" Next '↑実際は、tblの値を使用する。tbl(MyR, 16) End Sub 詳細工程表フォルダに「S960600148.xlsm」のブックを作って実行してもらうと 工程表_2部200シートの最初の区画のそれぞれのセルに 数式が入ると思います。 参考にしてみてください。 (HANA) ---- HANAさま こちらこそお忙しいのに長々と付き合っていただいて申し訳ありません。 参考スレの検証に時間がかかってしまいました。 似ているのにいざ書き換えに挑戦してみると混乱してしまって… ヘルプや定義を調べながらやってはいるのですが非常に難しいです。 また、教えていただいたSAMPLE1()も実際に動かしてみました。 教えていただきたいのですが、 MyBkN = "S960600148.xlsm" '←実際は tblの値を使用する。tbl(i, 4) Sheets("工程表_2部200").Range(もう一つA(ii)) = "=IF(" & LinkStr & RngA(ii) & "="""",""""," & LinkStr & RngA(ii) & ")" Next '↑実際は、tblの値を使用する。tbl(MyR, 16) この「実際は〜」の部分なのですが、 動かしてみるとS960600148の詳細工程表の日付はそれぞれ転記されるのですが、 他の転記済みの工事番号は転記されません。 ""の中は"S960600148.xlsm"や"工程表_2部200"のままではないですよね? 何をどのようにすると、その工事番号を読み取って該当のシートに行くようになるのでしょうか? Sub SAMPLE1()を新たに別のマクロで追加する場合、 Schedule5の方は MyPath = ThisWorkbook.Path & "¥" & MyFol & "¥" & tbl(i, 4) & ".xlsm" の様にブック名まで入っているので これを MyPath = ThisWorkbook.Path & "¥" & MyFol MyBkN = tbl(i, 4) & ".xlsm" の様にわけて、シート名は MyShN = "工程表" ↑このように変更しないとだめですってことでしょうか? (やってみたのですが何も変わらないのでやらなくてよかったのでしょうか?) 本当にしつこくて申し訳ございません。 今月中に運用テストして来月からやらないといけなくて、 非常に焦っています。 面倒なスレに付き合っていただき本当に申し訳ないのですが、 ご教示お願いいたします。 (苦戦4日目) ---- 詳しく説明できず、中途半端なので 何処の何を変えるべきなのかが うまく伝わって無かったと思います。 一応作ってみたので、動かしてみて貰えたらと思います。 '------ Sub Schedule6() Dim i As Long, ii As Long Dim DtR As Long, StR As Long, MyCnt As Long Dim msgR As Long, msgC As Long Dim tbl As Variant, MyCA As Variant, MyC2A As Variant, msgA As Variant Dim msg As String Dim MyPath As String, MyBkN As String, LinkStr As String Dim RngMA As Variant, RngSA As Variant msgA = Array("D2", "I2", "K2") Const OFR As Long = 7 Const RC As Long = 5 MyCA = Array("", "I7", "A9", "A7", "", "D7", "", "A10", "A11", "D10", "A8", "D8", "D9", "", "", "", "J7") 'A B C D E F G H I J K L M N O P Q Const GpBkN As String = "02_工番_原本.xlsm" Const MyFol As String = "詳細工程表" Const MyShN As String = "工程表" MyC2A = Array("", "E10", "A5", "A3", "", "F3", "", "A6", "A7", "E6", "A4", "E4", "E5", "", "", "", "G10") 'A B C D E F G H I J K L M N O P Q RngMA = Array("E11", "F15", "E21", "F21", "E25", "F25") '詳細工程表のセル番地 RngSA = Array("I9", "J9", "I10", "J10", "I11", "J11") '数式を入れるセル番地 With Sheets("転記") tbl = .Range("A1:Q" & .Range("A" & Rows.Count).End(xlUp).Row).Value msgR = Range(msgA(0)).Row For i = msgR + 1 To UBound(tbl, 1) If tbl(i, 1) = "○" Then For ii = 0 To UBound(msgA, 1) msgC = Range(msgA(ii)).Column msg = msg & vbLf & vbTab & tbl(msgR, msgC) & ":" & vbTab & tbl(i, msgC) Next MyPath = ThisWorkbook.Path & "¥" & MyFol MyBkN = tbl(i, 4) & ".xlsm" LinkStr = "'" & MyPath & "¥[" & MyBkN & "]" & MyShN & "'!" MyCnt = Application.CountIf(Sheets(tbl(i, 16)).Range("A:A"), tbl(i, 4)) If MyCnt > 0 Then '◆データがすでにあった場合 If MsgBox("転記済みデータです。" & msg & vbLf & _ "上書きしますか?", vbYesNo) = vbYes Then '詳細工程表 Workbooks.Open Filename:=MyPath & "¥" & MyBkN Call 転記2(MyC2A, tbl, i, MyBkN, MyShN) Application.DisplayAlerts = False ActiveWorkbook.Save ActiveWorkbook.Close Application.DisplayAlerts = True '部署別シート DtR = Application.Match(tbl(i, 4), Sheets(tbl(i, 16)).Range("A:A"), 0) StR = DtR - OFR Call 転記(MyCA, tbl, i, StR, MyPath & "¥" & MyBkN) '上書き済 .Range("A" & i).Value = "上書済" End If Else '◆データがまだ無かった場合 If MsgBox("新規データです。" & msg & vbLf & _ "登録しますか?", vbYesNo) = vbYes Then '詳細工程表 Workbooks.Open Filename:=ThisWorkbook.Path & "¥" & GpBkN Call 転記2(MyC2A, tbl, i, GpBkN, MyShN) ActiveWorkbook.SaveAs Filename:=MyPath & "¥" & MyBkN ActiveWindow.Close '部署別シート DtR = Application.Max(OFR, Sheets(tbl(i, 16)).Range("A" & Rows.Count).End(xlUp).Row) StR = Int((DtR - OFR + 1) / RC) * RC Call 転記(MyCA, tbl, i, StR, MyPath & "¥" & MyBkN) Call 参照(RngMA, RngSA, tbl, i, StR, LinkStr) '転記済 .Range("A" & i).Value = "転記済" End If End If End If msg = "" Next End With ThisWorkbook.Save MsgBox "処理が終了しました。" End Sub '------ Sub 転記(ByVal MyCA As Variant, ByVal tbl As Variant, ByVal MyR As Long, ByVal StR As Long, ByVal MyPath As String) Dim i As Long For i = 0 To UBound(MyCA, 1) If MyCA(i) <> "" Then If i = 3 Then Sheets(tbl(MyR, 16)).Range("A1").Offset(StR).Range(MyCA(i)).Value = "=HYPERLINK(""" & MyPath & """,""" & tbl(MyR, i + 1) & """)" Else Sheets(tbl(MyR, 16)).Range("A1").Offset(StR).Range(MyCA(i)).Value = tbl(MyR, i + 1) End If End If Next End Sub '------ Sub 転記2(ByVal MyCA As Variant, ByVal tbl As Variant, ByVal MyR As Long, ByVal MyBkN As String, ByVal MyShN As String) Dim i As Long For i = 0 To UBound(MyCA, 1) If MyCA(i) <> "" Then Workbooks(MyBkN).Sheets(MyShN).Range("A1").Range(MyCA(i)).Value = tbl(MyR, i + 1) End If Next End Sub '------ Sub 参照(ByVal RngMA As Variant, ByVal RngSA As Variant, ByVal tbl As Variant, ByVal MyR As Long, ByVal StR As Long, ByVal LinkStr As String) Dim i As Long For i = 0 To UBound(RngMA, 1) Sheets(tbl(MyR, 16)).Range("A1").Offset(StR).Range(RngSA(i)) = _ "=IF(" & LinkStr & RngMA(i) & "="""",""""," & LinkStr & RngMA(i) & ")" Next End Sub '------ MyPathを変えないといけない と言うのは MyPath = "C:¥Users¥Desktop¥工程表20130706¥詳細工程表¥S960600148.xlsm" って成ったままで、リンクする数式を作るときに 「ブック名まで入っているから」とこれを使うと C:¥Users¥Desktop¥工程表20130706¥詳細工程表¥S960600148.xlsm工程表!E11 ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾MyPath‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ って成っちゃいますね。 でも、本当は C:¥Users¥Desktop¥工程表20130706¥詳細工程表¥[S960600148.xlsm]工程表!E11 こんな感じで書かないといけないので MyPath = "C:¥Users¥Desktop¥工程表20130706¥詳細工程表" MyBkN = "S960600148.xlsm" と分けておいて、 保存する時 MyPath & "¥" & MyBkN C:¥Users¥Desktop¥工程表20130706¥詳細工程表¥S960600148.xlsm リンクする時 MyPath & "¥[" & MyBkN & "]" C:¥Users¥Desktop¥工程表20130706¥詳細工程表¥[S960600148.xlsm] って感じで使う事にしたら良いんじゃないか。 と言う意味でした。 今と成っては MyPath は ThisWorkbook.Path & "¥" & MyFol ←こんなものなので こうなると「わざわざ変数に入れなくても良いんじゃ?」なんて感じにも成って来ますが。。。 変数に何かを入れて、それを使うのにはいくつか利点が有るのですが そのうちの一つが「同じ組み合わせた物を何度も書かずに済む」ってのが有ると思います。 Schedule5だと、 MyPath = ThisWorkbook.Path & "¥" & MyFol & "¥" & tbl(i, 4) & ".xlsm" としておいて MyPath(使っている所)が5回あります。(内1回はカウントに含めるのは微妙な感じですが。) その5回に「ThisWorkbook.Path & "¥" & MyFol & "¥" & tbl(i, 4) & ".xlsm"」と書くなら たとえば Workbooks.Open Filename:=MyPath ↓ Workbooks.Open Filename:=ThisWorkbook.Path & "¥" & MyFol & "¥" & tbl(i, 4) & ".xlsm" Call 転記(MyCA, tbl, i, StR, MyPath) ↓ Call 転記(MyCA, tbl, i, StR, ThisWorkbook.Path & "¥" & MyFol & "¥" & tbl(i, 4) & ".xlsm") MyPath って変数は要らない事に成ります。 (HANA) ---- HANAさま 全てが希望通りに完璧に動きました! 本当に助かりました。 コードを拝見して分からなかったところもどうすればよかったのか分かりました。 本当にありがとうございました。 これで受注データcsvから工程表、工程表から詳細工程表まで流れるように業務が行えるわけですが、 詳細工程表には仕入一覧とlistというシートがあります。 受注データと同じように発注と入荷のデータも毎日csvに落とし、 工事番号ごとの詳細工程表を作成してある件名の発注と入荷のデータを抽出して、 コピペして管理をしていました。 (発注をlistに貼り付けて、一覧の方にvlookで見やすいように表にし、 表の方で入荷した発注ナンバーの品物を探して「済」と入力していました) これを引き続き組み込みたいのですが、 今回は工程表の方はいじらないので、工程表にVBAを書くのではないですよね? 別ブック(発注・入荷みたいな?)を作成して、 詳細工程表に工事番号のあるものを抽出して該当の工事番号のブックのlistに転記、 入荷の場合は同じように工事番号のブックに入荷したナンバーの品物の所に済とする。 みたいなことをやればいいのでしょうか? 取っ掛かりをまた間違えてしまっては大変なので、 アドバイスをいただけないでしょうか? 申し訳ありませんがよろしくお願いいたします。 (苦戦4日目) ---- 詳細工程表等、それぞれのブックは マクロがデータを更新しようと思ったタイミングで 誰かが使用中かもしれません。 そうなると、マクロはデータを更新出来ないことになります。 詳細工程表→転記ブックの部署毎のシート に関しても同様で 詳細工程表にデータを入れたタイミングで 転記ブックが使用中であれば 転記ブックの更新ができませんので、今回は「数式で参照しては」という提案をしました。 人が処理をする場合は「じゃあ、後回しにしよう。」 後回しにしてもまだ使用中だったら、使用中の人を探して 「更新したいから、閉じてください」って頼むこともできます。 ですが、自動処理となると それをやらせるのはまた面倒です。 イメージがつかめてないので、根本的に思い違いがあるかも知れませんが 別ブック(発注・入荷みたいな?)を作成して 詳細工程表に転記すれば良いようなデータを作っておいて これがどんなデータなのか。マクロで作るのか。判断できませんが。 詳細工程表ブックを開いたときにデータを参照するようなマクロを 詳細工程表ブックに仕込んでおくかな。。。 ただし、「右側の余白部分にデータを追加して」 なんて使い方を考えておられるなら 別ブックの構成も、しっかり考えておかないといけないですね。 (HANA) ---- HANAさま 引き続きありがとうございます。 参考スレを読ませていただいて、 複数のPCからのアクセスというお話が出て、 今回の工程表の場合はどうなるのか考えてみたのですが、 参考スレのように見積番号を順に取得していくものではないし、 開こうとしたときに誰かが使用していたら読み取り専用になるのかな? などと曖昧な思考のままで停止しておりました。 発注・入荷のデータ転記に関しては、 該当工事番号の発注データのコピペの繰り返しや、 入荷したものを探して「済」とする作業を行うのは、 HANAさんのおかげでここまで来れたので、 発注・入荷のcsvデータを落として加工→該当の工事番号の詳細工程表に転記及び入荷のチェックを マクロで作成したいと考えました。 今から作成に取り掛かりたいと思いますが、 >ただし、「右側の余白部分にデータを追加して」 >なんて使い方を考えておられるなら >別ブックの構成も、しっかり考えておかないといけないですね。 右側の余白部分にデータを追加して…というのは、 どういったことなのか分からなかったのですが、 右側の余白というのはどのデータのことになりますか?? (苦戦4日目) ---- >右側の余白というのはどのデータのことになりますか?? ってのが結局 「どうやって使うのか分からないので なんとも言えない」 につながるのです。 ○○をするなら、××にしておいた方が良いし △△するなら、□□にしておいた方が良い の様に、「その後どの様に使うか」によって どの様にしておくべきか ってのが自然と決まってくる と言う事を理解してもらうのは そう難しくないと思います。 例えば、今までの話でしたら 転記シートから、データを転記して 部署ごとのデータ一覧と詳細工程ブックを作りました。 部署ごとのデータ一覧は、 部署ごとにどの様な仕事があるか 部署ごとに工程の進み具合(?)を確認するため 工事番号をクリックすることで詳細工程ブックを容易に開くため に使いますよね。 そして、工程の進み具合(?)の日付は 転記シートからではなく 詳細工程ブックからデータを集めてくる必要がある。 となると まぁ、現在の様な仕組みに行き着くと思います。 (頭が違ったら、また違った仕組みになるとは思いますが。) >該当の工事番号の詳細工程表に転記及び入荷のチェック ってのがどんなものなのか 苦戦4日目さんにはイメージが有るのでしょうけど 私には影も形も見えませんので。。。 そのあたりのご説明をしていただかないと まさに 「考えただけ無駄」になる可能性が高いです。 意見を求めるのであれば、関連する事柄はすべて開示して頂きたいです。 (HANA) ---- HANAさま 自分で少しくらいやらなければと思って、 アドバイスだけいただけないかと思ったのですが… >苦戦4日目さんにはイメージが有るのでしょうけど >私には影も形も見えませんので。。。 仰る通りです。申し訳ありませんでした。 結局、足掻いてみたのですがどうにも手も足も出ず…助けていただきたいです。 具体的に説明させていただきます。 今回は工程表は関連しないので説明から省きます。 まず、発注のデータをどのようにしたらいいのか教えていただきたいです。 フォルダ名:工程表 フォルダ名:詳細工程表(工程表から作成した工事番号ごとのブックが入っています) ブック名:各工事番号がブック名です シート名1:工程表(工程表から転記させたものが入っています) シート名2:発注・入荷 シート名3:発注DB フォルダ名:出力DATA(発注と入荷のcsvデータを加工したものです) ブック名:発注入荷DATA シート名1:発注 シート名2:入荷 詳細工程表のシート3の発注DBと出力DATAのシート1の発注について やりたい事:詳細工程表のフォルダに作成された工事番号のブックに その工事番号で発注されたものを転記したい 発注DBは3行目が項目 発注は1行目が項目 列の構成は同じです ---発注入荷DATAのシート名:発注----- → ---各工事番号のシート名:発注DB--- A4:ブランク A2(A列は1から整理番号が振ってあります) B4:日付 B2 C4:発注番号 C2 D4:工事番号 D2 E4:ブランク E2 F4:ブランク F2 G4:仕入先コード G2 H4:仕入先 H2 I4:品名コード I2 J4:品名 J2 K4:ブランク k2 L4:納期 L2 M4:数量 M2 N4:ブランク N2 O4:単価 O2 P4:ブランク P2 Q4:社員?? Q2 R4:社員名 R2 このように転記し、シート名2:発注・入荷に以下のように表示されるように作成してあります。 シート名2:発注・入荷 A10:整理番号 B10:発注番号 C10:仕入先 D10:品名 E10:数量 F10:日付 G10:納期 H10:ここは納期回答を手入力で入れる予定です I10:※入荷状況を入れる ※入荷状況について シート名2:入荷 M列に工事番号 L列に発注番号 詳細工程表に作成してある工事番号の転記された発注番号があるか否かを見て、 あればI10のセルに「済」と入れたい。 以上のような事がしたいのですが… 教えていただいたSchedule1のコードを書き換えてなんとかならないかと思ったのですが、 出来ませんでした… ここまで出来れば本当に完成となります。 申し訳ありませんが、ご教示お願いいたします。 (苦戦4日目) ---- 各工事番号のシート名:発注DB→シート名2:発注・入荷 の仕組みって、どうなってますか? そもそも、どうしてDBシートを設けてあるのでしょう? 二つあるから 発注入荷DATAのシート名:発注 からデータを転記するのは 工事番号のシート名:発注DB 発注入荷DATAのシート名:入荷 からデータを転記(更新)するのは 工事番号のシート名:発注・入荷 なんて事に成るんですよね。 工事番号のシート名:発注DB を シート名:発注・入荷DB にして S列にでも「済」を入力し 発注・入荷シートに 発注データを表示する様にそれも表示するとかできれば どちらか一つの表だけを相手にすれば良くなります。 ちなみに 状況をきちんと説明する = コード作って下さいのお願い って事では無いので そうそう >>ただし、「右側の余白部分にデータを追加して」 >>なんて使い方を考えておられるなら ってのは >H10:ここは納期回答を手入力で入れる予定です の様な使い方の事です。 発注入荷DATAのシート名:発注 に、同じ工事番号で 発注番号が H01,H02,H03 と並んでたとしますね。 で、発注DBシート転記して 発注・入荷シートに H01,H02,H03 の順で並んだとします。 次に更新するとき、発注シートには 何故かH01のデータが無く H02,H03 と並んでいた場合 発注DBシートにあったデータはご破算にして、その時のデータを転記→発注・入荷シートに H02,H03 と表示 されると、困った事になりますね。 H01の物だった納期回答が、あたかもH02の納期回答の様になりますから。 って説明だと、分かりますか? (HANA) ---- >各工事番号のシート名:発注DB→シート名2:発注・入荷 >の仕組みって、どうなってますか? シート名2:発注・入荷の各項目はA列の整理番号と発注DBの整理番号でVLOOKで表示させています。 >そもそも、どうしてDBシートを設けてあるのでしょう? 以前は専用ソフトの発注データを発注DBにコピペしていたので、 その流れをそのままにしておりました。 HANAさんの意見を伺って、 そもそも詳細工程表の発注DBは不必要では?と思いました。 今回、発注入荷DATAのシート名:発注とシート名:入荷があるので、 詳細工程表の発注DBはいらないですね… 1.発注入荷DATAの発注→2.詳細工程表の発注DB→3.詳細工程表の発注・入荷 2.と3.は同じ事で見せ方が違うだけなので… 1.発注入荷DATAの発注→2.詳細工程表の発注・入荷に転記させたほうがいいと思いましたので、 これで今日もう一度作成しなおしてみます。 >H01の物だった納期回答が、あたかもH02の納期回答の様に これについては、発注・入荷のデータは前日のデータは消してから今日のデータだけを加工する予定だったのですが、 HANAさんがおっしゃっているのは、累積させていくと…という事でしょうか? 全て丸投げみたいなコメントをしてしまって申し訳ありませんでした。 発注、入荷があった該当の工事番号が作成された詳細工程表のフォルダにあるか? この部分をどうやったらいいのか分からずに諦めてしまっていました。 なんとかやってみます!ありがとうございました。 (苦戦4日目) ---- >なんとかやってみます! いやいや、ちょっと待ってください。 いくつかクリアしないといけない問題もありますし 先に方針を決めるのが良いと思います。 色々な事をやるのは、何をやっても今後の為にはなると思いますが >今月中に運用テストして来月から に間に合わないと仕様がないので。 あと、これまでのやり取りで苦戦4日目さんが 「丸投げをしない方」ってのは分かっているので その点は心配せずに まずは状況を詳しく教えて下さい。 >発注・入荷のデータは前日のデータは消してから今日のデータだけを加工する予定だったのですが、 >HANAさんがおっしゃっているのは、累積させていくと…という事でしょうか? 私は、累積させていくのかと思ってました。 あ、発注入荷DATAブックの方です。 工事番号のブックは、データを残していくんですよね? 発注入荷DATAブックの方は、転記後に 「あぁ、この工事番号の入力 間違えてるよ」なんて時に どうするんだろうと 思ったり。。。 まぁ、転記ブックのデータが、過去のデータも一緒になっているものを処理していたので こちらもてっきりその方向だと思ってました。 転記ブックのデータこそ「今日追加されたデータだけ処理すればいいじゃん」 と言う印象だったので。 後は、最初にも書きましたが 更新しようとした時に 工事番号のブックが開いていると 更新できませんが そのあたりはどのようにお考えでしょうか? (HANA) ---- こちらとしては全てHANさん頼みみたいになってしまって恐縮してます。 自分なりに必死に調べてるんですが、未知の領域でして… がんばりますのでもう少しお付き合いください。 よろしくお願いいたします。 早速ですが、データの累積についてです。 ブック:発注入荷DATA→累積させない ブック:詳細工程表のシート:発注DB累積させる です。 理由ですが、工程表の受注データの転記については、 フラグを立てる人が複数人おり、 その日(というより全て前日分を朝イチで落として処理しています)の受注データをその日にチェックして、 フラグを立てるという処理が出来ないことが多いためです。 ですので受注日より30日経過したものは削除するように別途マクロを作成いたしました。 発注入荷に関しては、わたし一人がデータを落として転記、 他の人は、何が発注できていて、何がいつ納品になる予定か? これを閲覧したいだけなのです。 また、システム上工事番号の修正ができないおかしな状況なので、 「間違えてるよ!」的な事態が起こった時は、 その発注?bヘ削除→新たに発注をし直すので別の発注?bェ付くことになります。 最終的には詳細工程表のシート名:発注・入荷にその日の発注データと入荷データが反映される事が目的なので、 私が当初考えて行っていた方法では同じことを繰り返していることになるので不適切だと思います。 発注データ.csvの一部の項目を該当の該当の工事番号の詳細工程表、シート名:工程表に 入荷データ.csv工事番号、発注番号を見て該当の詳細工程表、シート名:工程表の入荷状況のセルに「済」を入れたい。 ↑ということなので… HANAさんに言っていただくまで何の疑いも持たずに「これで行こう!」と思っていました。 >後は、最初にも書きましたが 更新しようとした時に >工事番号のブックが開いていると 更新できませんが >そのあたりはどのようにお考えでしょうか? これについては、回避方法としては 「今からやるから誰もいじらないでね」みたいなことではだめでしょうか? フラグを立てる人3名、発注入荷のデータをいじる人は私だけ、 他の部員は読み取り専用かPDFにして見る事しか出来ないように運用しようと思っています。 フラグを立てる人も作業としてはフラグを立てる→工程表に転記するボタンを押す →詳細工程表の日程を考えて入力するだけ。です。 このような説明で大丈夫でしょうか? 夜、また参ります!よろしくお願いいたします。 (苦戦4日目) ---- 発注データ.csv・入荷データ.csvは、 詳細工程表ブックの 発注・入荷 シートに反映させるのですよね? >受注日より30日経過したものは削除するように別途マクロを作成いたしました。 ってのは、何処のデータに関する事ですか? 当初取り扱ってたデータが、受注データですか? >フラグを立てる ってのは、転記ブック転記シートのA列に「○」を付ける と言う事ですか? となると、タイミングによっては 発注データが反映されなかったりする事になりませんか? とりあえず、発注データ・入荷データに関してですが ・工事番号順に並んでいるか(もしくは処理の前に並べ替えても良いか) ・該当がなかったデータの扱いは? 例えば、詳細工程表ブックが作られてなかったり その中に 発注番号のデータがなかったり ・入荷データの、M,L列以外の情報は? ってあたりが疑問です。 転記ブックの処理に関してもそうですが、どんなデータをいつ処理したのか 今は何も残りませんので、後々のトラブルにつながりそうにも思えます。 (HANA) ---- >発注データ.csv・入荷データ.csvは、 >詳細工程表ブックの 発注・入荷 シートに反映させるのですよね? はい。そのようにしたいです。 >受注日より30日経過したものは削除するように別途マクロを作成いたしました。 >ってのは、何処のデータに関する事ですか? >当初取り扱ってたデータが、受注データですか? はい。工程表の転記シートに受注データが累積されるように教えていただきました件です。 その受注データは受注日より30日経過で削除するように作成しました。 >フラグを立てる >ってのは、転記ブック転記シートのA列に「○」を付ける >と言う事ですか? はい。○のことです。表現が変わってしまってすみません。 >となると、タイミングによっては 発注データが反映されなかったりする事になりませんか? …えと、発注データを反映させたいものというのは詳細工程表が作られているもの限定です。 システムから落とした発注データの中から詳細工程表が作られている工事番号のデータのみを その工事番号の詳細工程表の発注・入荷シート転記したいのです。 詳細工程表を作らなくてはいけないのに○を付けるのが遅れた しかし、発注は行われている →こういうズレの事をおっしゃっていますか? もしそうでしたらあり得る事です… 今までの手作業での流れで考えると、 詳細工程表を作成した際に、その工事番号で行われた発注データのみを落としてコピペ。 その翌日からはいつものように前日のデータの中からその工事番号を抽出してコピペしていました。 そう考えるとこの事案の回避方法は詳細工程表が作られた際に、 発注の履歴を自分でチェックするしかないですよね… >とりあえず、発注データ・入荷データに関してですが >・工事番号順に並んでいるか(もしくは処理の前に並べ替えても良いか) 落とした発注入荷データ共に発注番号、入荷番号順で表示されていますが、並べ替えは問題ないです。 >・該当がなかったデータの扱いは? >例えば、詳細工程表ブックが作られてなかったり >その中に 発注番号のデータがなかったり 詳細工程表があるもの限定なのでそれ以外は削除しています。 ただタイミングの問題(本当は作られていないといけないのに○が遅くて発注が進んでしまっている) は手作業で回避するしかないのかなと思っています。 発注番号のデータがないというのはどういう事を想定しておられますか? 発注番号がない発注というものは存在しないです(発注システムで自動で割り振られる番号です) >・入荷データの、M,L列以外の情報は? >ってあたりが疑問です。 当初の計画では 発注・入荷CSV ↓ ★発注入荷DATA(ここで並び順や枝番の削除などをしています) ↓ ★詳細工程表の発注DB ↓ 詳細工程表の発注・入荷 というシート転記させる予定でした。 ですので、どのように処理するかによって列が違ってきてしまうのですが… CSVデータでの列を申し上げたほうがいいのでしょうか? 私は★の部分の作業は無意味かと思ったのですが… >転記ブックの処理に関してもそうですが、どんなデータをいつ処理したのか >今は何も残りませんので、後々のトラブルにつながりそうにも思えます。 30日経過の受注データ削除 発注・入荷データも詳細工程表が存在しないものは削除 この部分の事でしょうか? この点に関しては上司からの指示でして… 今回作成している一連の工程表上でデータがなくても、 システムにはすべて存在しており毎日バックアップも取っております。 見当違いな回答でしたらすみません。 (苦戦4日目) ---- 元になるデータから転記させたいデータの状況をまとめました。 発注データCSVデータを使用して転記する場合 データの配列と以前手作業で行っていた時の加工方法は以下の通りです。 A→発注日付 20130711となっているものを2013/7/11と区切位置を日付にしていました B→発注番号 5ケタの数字です(処理なし) C→工事番号 S96000000011 右の11が枝番なので削除していました D→仕入先コード 11111 5ケタの数字です(処理なし) E→仕入先名 (処理なし) F→担当者コード 11 2ケタの数字です(処理なし) G→担当者名 山田太郎(処理なし) H→発注納期 20130719となっているものを2013/7/19と区切位置を日付にしていました I→品目コード 書式設定で数値にしていました J→品目名 (処理なし) K→型番 (処理なし) L→図番 (処理なし) M→発注数量 (処理なし) N→発注単価 (処理なし) O→備考1 (処理なし) P→注文書番号 (処理なし) 入荷データCSVデータを使用して転記する場合 データの配列と以前手作業で行っていた時の加工方法は以下の通りです。 A→伝票日付 20130711となっているものを2013/7/11と区切位置を日付にしていました B→入荷番号 (処理なし) C→行 S96000000011 右の11が枝番なので削除していました D→仕入先コード 11111 5ケタの数字です(処理なし) E→仕入先名 (処理なし) F→品目コード 書式設定で数値にしていました G→品目名 (処理なし) H→入荷数量 (処理なし) I→入荷単価 (処理なし) J→備考 (処理なし) K→明細区分 (処理なし) L→工事番号 S96000000011 右の11が枝番なので削除していました M→明細区分 (処理なし) N→倉庫コード (処理なし) O→担当者コード 11 2ケタの数字です(処理なし) P→担当者名 山田太郎(処理なし) 工事番号の詳細工程表の転記させたいセル番号は以下の通りです。 B10→発注番号 C10→仕入先名 D10→品目名 E10→発注数量 F10→発注日付 G10→発注納期 H10→※手入力で納期回答の日付を入力 I10→※入荷したら「済」と入れるセル I10以外はすべて発注データからの転記になります。 以前は項目をぼかして書いておりましたので今回のと表現が違います。 ごちゃごちゃと申し訳ないです…。 (苦戦4日目) ---- >>タイミングによっては 発注データが反映されなかったりする事になりませんか? >詳細工程表を作らなくてはいけないのに○を付けるのが遅れた >しかし、発注は行われている >→こういうズレの事をおっしゃっていますか? はい、そういうズレの事を言ってました。 >発注番号のデータがないというのはどういう事を想定しておられますか? 該当工事番号の詳細工程表を確認したが、一致する発注番号が無い場合 を想定してました。 本来、発注データから転記されているはずのデータが転記されてなかったり 何かの理由で、入荷確認が行われるまでに行が削除されてしまっていたり そんな場合の事です。 >>今は何も残りませんので、後々のトラブルにつながりそうにも思えます。 >30日経過の受注データ削除 >発注・入荷データも詳細工程表が存在しないものは削除 >この部分の事でしょうか? と言うよりも 部署毎のシートや、詳細工程表ブックになくちゃいけないデータが無かった場合 「どうしてないのか、さっぱりわからないし、調べようもない」 となって、そのうち「こんな不確かなものは使えない」となりはしないか です。 このデータは何日に処理をした。その時に処理をしたデータはこれ。 の様に、今後必要になる可能性が低くても 日付を付けた状態にしておけば 「完全に」とはいきませんが、記憶を呼び起こす手助けにもなって 原因究明の一端として、役に立つのではないかと思います。 単純なな場合だと 受注データを転記したら、○→済 に変えるだけですが どこかの列に 処理をした日付を入れておく。 後日「この発注データが詳細工程表ブックに無いんだけど!!」 って言われた時に、その処理日を見て 「作るのが遅かったからだよ。」 とか言えますよね。 入荷済のものに「済」がついていなかった場合 色々な理由が考えられると思いますが もともとデータが無かったんだよ。詳細工程表ブックが無かったんだよ。 詳細工程表ブックが開けなかったんだよ。発注番号が見つからなかったんだよ。 こっちは処理済になってるし、誰かが間違って消したんじゃないの? なんてのも、「データは反映させたからもういらないね」 で消してしまったら、 どこにも何も残らなくなってしまいます。 更新時のエラー等は、処理中にその旨を書き残さないと一緒ですが。 「おかしいね。どうしたんだろうね」で終われる様な使い方しかしないなら そのあたりはあまり考えなくても良いのかもしれませんが。 とはいえ、そもそもデータを残さない様にしてあるのは データ量が多すぎる 等の理由もあるかとは思いますので こちらからは何とも言いづらいですが。 当初お話を伺った時に思た処理は 詳細工程表ブックを開いた時に 毎回 発注入荷DATAブックの発注データ・入荷データを見に行って 最新のものに更新する ってものでした。 つまり、発注入荷DATAブックの発注データ・入荷データには 過去のものも含め その工事番号にかかわるすべてのデータが 有ることが前提です。 すると、詳細工程表ブックを作るタイミングがずれても 「そこは手作業で」って事をせずに済みますよね。 詳細工程表ブックを開くタイミングで そのブックのデータを更新するので 「一括で処理をするから、ブックを閉じておいて」なんて 言っておかなくても済みます。 実際問題としては「これまでのすべてのデータをチェックする」なんてのは出来ないので どこかで手を打つことにしないと仕様がないと思いますが。 また、処理時間がかかって「毎回開くのに時間がかかるのがストレス」 になってしまうなら、別の方法をとらないといけなくなってしまいますが。 この辺りはデータ量等にも左右されると思いますので。 >どのように処理するかによって列が違ってきてしまうのですが… >CSVデータでの列を申し上げたほうがいいのでしょうか? 並べ替えを行うのに、M,L列だけを並べ替えるわけにはいかないので お伺いしてみました。 実際にコードを作らないといけない元データの配置で教えてもらえれば良いので まだ保留 って事ですかね。 前処理の段階で、並べ替えてもらえれば良いんですが。 入荷処理時の注意点としてよくあるのが「分納」ですが 今回は、そういった事は無いんでしょうか? 以下、つぶやきです。 年度が替わって新しいフォルダで処理する事になったりすると ○○は前年度のフォルダ。××は今年度のフォルダ。 みたいな事になってしまわないでしょうか? 終わったものだけ前年度のフォルダに残して 仕掛のものは今年度のフォルダに一緒に移動させてから 一緒に処理をするのなら「マクロが保存されているブックがあるフォルダの〜〜」 を突き通せますが。 (HANA) ---- こんばんは! 諸々の問題点について上の者と話し合ってみたところ、 急遽、月曜日に試運転公開の流れになってしまいました… 本日受注部分のみ動かしてもらったのですが、 ブックを開く時と閉じるときの保存がとても長いと言われ、 話し合いの結果、やはり各データを蓄積させるのはやめようということになり、 HANAさんの懸念されている問題点についてはその都度手作業で対応ということになりました。 データを転記する、詳細工程表に日程を入力する。 私以外はこの作業以外のことをやってはいけないと徹底し、 保護をかけてデータを守る。 その上で訳のわからないことが起こった場合は都度対応です。 なるべく受注した翌日に詳細工程表を作成しなければならないものは作成して、 発注入荷データとのずれのないように行っていこうというゆるい感覚です…。 その他に、工程表を複数で開いてそれぞれ別の工事番号に〇のフラグを立てて、 詳細工程表は作成されるのか? これについては実験をしたことがなく答えられなかったのですが、 希望としては工程表は複数人で処理が可能な状態にしたいのです。 …無知でお恥ずかしいのですが、一つのブックを開いている時、 他の人がそのブックをいじれるのですか?読み取り専用です、みたいにならないのでしょうか? 参考スレの内容だと見積書を作成している時の例がありましたが、 「また後でやってね」的なメッセージが表示されると記憶しておりますが、 また後でではなく、みんなが今いじりたい時はどうしたらいいのでしょうか? 「分納」についてはありません。 年度の境目についてなのですが、これについては今回のデータを作成する前に話し合ったのですが、 年度の違う二つのフォルダをいじるのは面倒ですよね。 お返事出来るような結論が出ていないというのが現状です。 急展開で曖昧な部分が多いまま作成しなければならなくなってしまいました…。 今から発注データと入荷データの加工しなければ転記できない部分を作成したいと思います。 勝手なお願いで申し訳ありませんが、 助けていただきたいです。よろしくお願いいたします。 (苦戦4日目) ---- たびたびすみません。 保護についてやってみたのですが、 工程表の受注データのシートは、 'シート保護解除 ActiveSheet.Unprotect Password:="1111" 'シート保護 Sheets("受注データ").Protect Password:="1111" と追記して保護が出来ました。 転記シートは、 〇を付ける列を編集可能にして以下のようにしました。 'シート保護解除 Dim W As Worksheet For Each W In Worksheets W.Unprotect ("1111") 'パスワード1111 'シート保護 'Dim W As Worksheet For Each W In Worksheets W.Protect ("1111") 'パスワード1111 Next W 各プロジェクト毎のシートについてなのですが、 各シートに以下のようなD1セルに入力したものをテキストボックスで表示させるマクロを組んであります。 A1セルにテキストボックスが表示され、そのテキストボックスを自由に動かせるようにしておりました。 Private Sub Worksheet_Change(ByVal Target As Range) 'D1の値をコメント表示 If Target.Address(0, 0) = "D1" Then Dim Tb As Shape Set Tb = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 8, 8, 200, 10) Tb.Fill.Visible = msoFalse Tb.Line.Visible = msoFalse With Tb.TextFrame .Characters.Text = Range("D1").Text .Characters.Font.Size = 8 .Characters.Font.ColorIndex = 56 .VerticalAlignment = xlVAlignCenter .AutoSize = True End With Range("D1:J1").Select Selection.ClearContents Range("A1").Select Set Tb = Nothing End If End Sub 保護の選択項目でオブジェクトの編集を可能にしてみたりしたのですが、 D1セルに文言を入力してエンターを押しても、 テキストボックスが掴めない状態です。 テキストボックスの枠も表示されません。 各プロジェクト別のシート、テキストボックスだけは自由に操作したいのですが、 どのようにすればいいか合わせてご教示いただけないでしょうか? よろしくお願いいたします。 (苦戦4日目) ---- >希望としては工程表は複数人で処理が可能な状態にしたいのです。 一応、エクセルには「共有」と言う機能が有りますが 良い結果には成らないんじゃないかと思います。 私は実戦で使った事は無いので、確認してみて下さい。 >年度の違う二つのフォルダをいじるのは面倒ですよね。 面倒というより、コードが変わってきますので。 ちなみに、シートの保護がしてあると マクロで変更出来ないので おまじないを入れるか http://www.asahi-net.or.jp/‾ef2o-inue/vba_o/sub05_030_040.html データを変更するまでの間に 保護を解除しておき データ変更後再度保護する様なコードに変更が必要になると思います。 発注・入荷データの更新は ブックの開け閉めを無駄なく行おうとすると少し面倒ですが 発注データを処理して、その後入荷データを処理するので良ければ そう難しく無く出来ると思います。 ↓かなりテキトーなコードですが。 '------ Sub 発注転記() Dim i As Long, StR As Long, LaR As Long, CnR As Long, MxR As Long Dim tbl As Variant Dim MyBook As Workbook, ThSh As Worksheet Dim MyPath As String, MyBkPath As String MyPath = ThisWorkbook.Path & "¥詳細工程表" Set ThSh = ThisWorkbook.Sheets("発注") With ThSh tbl = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 16) End With For i = 4 To UBound(tbl, 1) - 1 If tbl(i - 1, 3) <> tbl(i, 3) Then StR = i End If If tbl(i, 3) <> tbl(i + 1, 3) Then LaR = i 'ブックが有るか確認 MyBkPath = MyPath & "¥" & tbl(i, 3) & ".xlsm" If Dir(MyBkPath) <> "" Then CnR = LaR - StR + 1 'ブックを開いてデータを転記 Set MyBook = Workbooks.Open(MyBkPath) With MyBook.Sheets("発注・入荷") MxR = .Range("B" & Rows.Count).End(xlUp).Row + 1 With .Range("A" & MxR).Resize(CnR) .Offset(, 1).Value = ThSh.Range("B" & StR).Resize(CnR).Value .Offset(, 2).Value = ThSh.Range("E" & StR).Resize(CnR).Value .Offset(, 3).Value = ThSh.Range("J" & StR).Resize(CnR).Value .Offset(, 4).Value = ThSh.Range("M" & StR).Resize(CnR).Value .Offset(, 5).Value = ThSh.Range("A" & StR).Resize(CnR).Value .Offset(, 6).Value = ThSh.Range("H" & StR).Resize(CnR).Value End With '保存して閉じる .Parent.Save .Parent.Close End With Set MyBook = Nothing End If End If Next Set ThSh = Nothing End Sub '------ Sub 入荷チェック() Dim i As Long, ii As Long, MxR As Long Dim tbl As Variant, tbl2 As Variant Dim dic As Object Dim MyBook As Workbook, ThSh As Worksheet Dim MyPath As String, MyBkPath As String MyPath = ThisWorkbook.Path & "¥詳細工程表" Set ThSh = ThisWorkbook.Sheets("入荷") Set dic = CreateObject("scripting.dictionary") With ThSh tbl = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 16) End With For i = 3 To UBound(tbl, 1) - 1 dic(tbl(i, 12) & "_" & tbl(i, 11)) = "" If tbl(i, 12) <> tbl(i + 1, 12) Then 'ブックが有るか確認 MyBkPath = MyPath & "¥" & tbl(i, 12) & ".xlsm" If Dir(MyBkPath) <> "" Then 'ブックを開いてデータをチェック Set MyBook = Workbooks.Open(MyBkPath) With MyBook.Sheets("発注・入荷") MxR = .Range("B" & Rows.Count).End(xlUp).Row tbl2 = .Range("A1").Resize(MxR, 9) For ii = 10 To UBound(tbl2, 1) If dic.Exists(tbl(i, 12) & "_" & tbl2(ii, 2)) Then .Range("I" & ii).Value = "済" End If Next '保存して閉じる .Parent.Save .Parent.Close End With Set MyBook = Nothing End If End If Next Set ThSh = Nothing Set dic = Nothing End Sub '------ 発注入荷DATAブックは、転記ブックと同じフォルダに置いて実行して下さい。 発注シートは、3行目が見出しで4行目からデータ 入荷シートは、2行目が見出しで3行目からデータ。K列が発注番号、L列が工事番号。 詳細工程表ブックの発注・入荷シートは、9行目が見出しで10行目からデータ を想定しています。 後は、研究してみて下さい。 テキストボックスに関しては >保護の選択項目でオブジェクトの編集を可能 にしておくと、こちらでは動かせましたが。。。 別件として、新たに質問をしてもらった方が良いかもしれません。 (HANA) ---- HANAさん、ありがとうございます! ブックが有るか確認の所から最後のEND IFに飛んでしまって、 行を見ていない?と言ったらいいのでしょうか? そんな感じなのですが… 私の元となるデータと差異がある為でしょうか? 苦戦4日目 ---- 発注入荷DATAブックは、転記ブックと同じフォルダにおいていませんでした! 同じ所に置けない場合、フォルダ名をどこに書き加えたら良いのでしょうか? 苦戦4日目 ---- たびたびすみません。 同じフォルダにしたら動きました! 今から確認します。 取り急ぎご報告まで。 苦戦4日目 ---- あ〜、済みません。 発注入荷DATAブックは、出力DATAフォルダにあるんでしたね。 それぞれのマクロに MyPath = ThisWorkbook.Path & "¥詳細工程表" が一か所ずつありますが↓に変更してみて下さい。 MyPath = ThisWorkbook.Path & "¥..¥詳細工程表" ‾‾‾ (HANA) ---- 申し訳ないです!..の所はフォルダの名前を入れるのではないのですね! そこは自分で入れて!ということかと思ってやってしまっていました。 もう一度やってみます。 (苦戦4日目) ---- そうです。そのまま書いて下さい。 以下、書きかけだった物を折角なので 掲載しておきます。 えっと。。。「¥..」とそのまま書いて下さい。 ThisWorkbook.Path ・・・ブックが保存されているフォルダの ¥.. ・・・一つ上のフォルダの中の ¥詳細工程表 ・・・詳細工程表フォルダ です。 ThisWorkbook.Path & "¥00_出力DATA¥詳細工程表" だと、 ブックが保存されているフォルダの中の「00_出力DATA」フォルダの中の「詳細工程表」フォルダ の中で、該当の工事番号が名前に成っているブックを探す事に成っちゃいます。 受注データ転記の時は マクロが入っているブックが有るフォルダの中の〜〜 でしたよね。 ‾‾‾‾ 今回は マクロが入っているブックが有るフォルダの上のフォルダの〜〜 です。 ‾‾‾‾ (HANA) ---- そうなんですか! なるほどよくわかりましたっ! 昼間何回もフォルダの名前を入れたりしてしまいました。 お恥ずかしいです。 発注データは完璧に転記出来ました。 ありがとうございます! 入荷データなんですが、済が入力されないです。 私が始めの説明を間違えてしまったのだと思うのですが、 入荷のシートは3行目が項目で4行目からデータなので For i = 3 To UBound(tbl, 1) - 1 For i = 4 To UBound(tbl, 1) - 1にしました。 K列が発注番号、L列が工事番号になっています。 データはB列からQ列なのですが、 12、11という数字は「何列目」という意味を表わす数字でしょうか? For ii = 10 To UBound(tbl2, 1) UBound関数を調べてみたのですが… この10が分からないのですが、教えていただけますか? よろしくお願いいたします。 (苦戦4日目) ---- >私が始めの説明を間違えてしまったのだと思うのですが、 いや、説明が何処に有るかわからず 適当に決めた所です。 >12、11という数字は「何列目」という意味を表わす数字でしょうか? そうです。 >For ii = 10 To UBound(tbl2, 1) >この10が分からないのですが 詳細工程表ブックの発注・入荷シートのデータが 10行目からじゃなかったでしたっけ? ステップインで実行して、動きを確認してみて貰えると良いのですが。 (HANA) ---- 10行目です。 先程からステップインをやってみているのですが、 13行目から37行目に飛んでいます。 13行目 For i = 4 To UBound(tbl, 1) - 1 37行目 Set ThSh = Nothing 発注と入荷の内容は確認していて、 入荷のものがあるのですが… 11はK列の発注?? 12はL列の工事番号という意味ですよね? (苦戦4日目) ---- 割り込み失礼 13行目 For i = 4 To UBound(tbl, 1) - 1 でループせずにNextの次のステートメントまで飛んでしまうのであれば、 UBound(tbl, 1) - 1 で取得される数値が 4未満である可能性があります。 もしそうであれば、変数tblの配列数が4未満です。 となると、下記で取得している配列に問題があるのかもしれません。 With ThSh tbl = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 16) End With Sheets("入荷")のA列にデータがA3までしかない。 もしくは、A列が全て何らかのデータで埋まっている。 (みやほりん) ---- みやほりんさん、レスありがとうございます。 入荷シートのA列に値は入っておらず、マクロの実行ボタンを置いてあるだけです。 シート内のデータはB列からQ列までを使用しております。 発注シートも同じくB列からQ列までを使用していまして、 教えていただいたコードの tbl = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 16) を tbl = .Range("B1").Resize(.Range("B" & Rows.Count).End(xlUp).Row + 1, 16) に書き換えて無事転記できましたので、 同じように入荷シートも書き換えてみたのですが… すみません! 今、自分の間違いに気付きました… tbl2 = .Range("A1").Resize(MxR, 9) このコードのA1は詳細工程表のA1セルのことなのに、 このA1までB1にしてしまっていました…。 無事に動き、転記されました。 もう一度いちから改めて動かしてみたいと思います。 ありがとうございました!!!!(苦戦4日目) ---- HANAさま 今回の質問では長々と大変お世話になりありがとうございました。 VBA初心者の私にはかなり高度でとても無理だと思っておりましたが、 こちらで相談させていただいて親身になっていただき、 完成に漕ぎ着けました。 HANAさんのおかげです。本当にありがとうございました。 今まで知らなかった事ばかりで大変勉強になりましたし、 HANAさんにアドバイスをいただき、参考書やネットを調べて… うなされるほどの日々でしたが、 一つ一つチャレンジして動いたときは感動いたしました。 次回またこちらに来る際には少しわかってきたじゃんと思っていただける位には、 なっていたいと思います! あ、先日テキストボックスについて質問させていただいた件ですが、 2010がそうさせてしまっていたようです。 2007では問題なく保護をかけてテキストボックスをつかむ事が出来ました。 これで完成したデータを守れます! HANAさん、本当に長時間おつきあい頂きましてありがとうございました。 お世話になりました。 みやほりんさん、最後にご助言いただきましたおかげで完成いたしました。 お礼申し上げます。 本当にありがとうございました。 (苦戦4日目) ---- みやほりんさん、ありがとうございます。 苦戦4日目さん、無事動きましたか。 これから使っていってもらうと、色々不具合が出たり 変更が有ったりすると思いますので ここからが始まりだと思ってもらうのが良いと思います。 最後の御説明で >A→伝票日付 20130711となっているものを2013/7/11と区切位置を日付にしていました となっていましたので、A列からデータが入っているのだとおもってました。 ステップインで実行する時、ローカルウィンドウは表示させましたか? 各変数の状況が確認できますので、画面が狭くなってしまいますが 表示させてもらえると良いと思います。 私がテストした環境だと、A7セルまで入力が有るので ローカルウィンドウを表示させて、tbl の「型」を見ると Variant/Variant(1 to 8,1 to 16) と成っています。 UBound(tbl, 1) と言うのは、前側(1 to 8)の方の個数 = 8 です。 UBound(tbl, 2) とあったら、二番目(1 to 16)の方の個数 = 16 です。 コードは For i = 3 To UBound(tbl, 1) - 1 に成っていますので i = 3から 8-1=7 までループをすることになります。 tbl が (1 to 8,1 to 16) の大きさに成ったのは、 この変数にデータを入れた tbl = .Range("A1").Resize(.Range("A" & Rows.Count).End(xlUp).Row + 1, 16) この時に決まりました。 ↓の一文が、どういう理由でどんな値に成るか分かりますか? .Range("A" & Rows.Count).End(xlUp).Row A列のワークシートの一番下のセルから ・・・・・Range("A" & Rows.Count) 上方向に探していって領域の終端のセルの・・・・End(xlUp) 行番号です。・・・・・・・・・・・・・・・・・Row A7セルまで入力が有る場合は、A7セルが Range("A" & Rows.Count).End(xlUp) したセルなので その行番号=7 コードではそれに「+1」が付いているので tbl = .Range("A1").Resize(8, 16) A1セルを起点に、8行,16列の範囲の値を tblに入れる です。 あ、ここ 最後に「.Value」を忘れているので、付けておいて下さい。 (発注転記・入荷チェック 共に。。。) ステップインで実行する時は、このあたりも確認しながら見ていって下さい。 これが、デバッグ作業に成ります。 まぁ、まずはコードをしっかり読んで、何処で何が行われているのか 分かってもらわないといけませんが。 ループしないな。。。(´・ω・`) UBound(tbl, 1) はどうなってるかな? ・・・・で、ローカルウィンドウを確認。 えぇぇっ、「1 to 2」に成ってるじゃん。Σ(*゚ロ゚ノ)ノ データは7行目まであるから「1 to 8」に成ってくれないとおかしいのに。 tblにデータを入れる所はどうなってるかな。((*゚д゚*)) tbl = 〜 の上側にでも MsgBox .Range("A" & Rows.Count).End(xlUp).Row を入れて、確認すると う〜ん、「1」って成るんだけど。。。o(;-_-;)o もしかして!!A列って入力無い列じゃん!!((p>ω<q)) なんてのを繰り返しながら、コードを作っていきます。 ローカルウィンドウの他に、イミディエイトウィンドウもありますので どちらも活用して貰えると良いと思います。 (HANA) ---- HANAさん、詳しく教えていただいてありがとうございます。 最後の御説明で >A→伝票日付 20130711となっているものを2013/7/11と区切位置を日付にしていました となっていましたので、A列からデータが入っているのだとおもってました。 >申し訳ありません。加工する前のデータの方が話が分かりやすいかと思い… >ステップインで実行する時、ローカルウィンドウは表示させましたか? はい、表示させていました。 今回はじめてこのウィンドウとイミディエイトウィンドウを見ました。 イミディエイトウィンドウの方は会社の人に教えていただいて、 使い方を知った次第です…。 ↓の一文が、どういう理由でどんな値に成るか分かりますか? .Range("A" & Rows.Count).End(xlUp).Row これはなんとかわかります… 先日は保護をかけられたと報告させていただきましたが、 今日実行してみたら途中で止まってしまいました。 (いろいろ調べてみたのですが、パスワードをコードの中に記述するのは危険とありましたので、 他の方法でやってみています) 受注データのシートから転記シート転記させに行っているので、 転記シートの方に行く前に転記シートの保護を解除しなければいけないんですよね…? そこで転記シートの保護解除を入れているのですが… うまくいかないのです。 教えていただいたページを読んで実験もしたのに。 もうちょっとがんばってみます!色々とありがとうございました。 (苦戦4日目) ---- HANAさま 締めたつもりでいたのですが、 Sub Schedule6()のシートの保護と解除のところで、 一日中やってはいたのですが躓いてしまいまして… 受注データ取り込みのコードでは、 最初に受注データと転記シートの保護を解除し、最後に保護をかけて無事動きました。 しかし、Sub Schedule6()のコードでは、 最初に転記シートの保護を解除し、 処理が完了しましたの後に保護をかけると、★部分で止まってしまいます。 Sub 転記(ByVal MyCA As Variant, ByVal tbl As Variant, ByVal MyR As Long, ByVal StR As Long, ByVal MyPath As String) Dim i As Long For i = 0 To UBound(MyCA, 1) If MyCA(i) <> "" Then If i = 3 Then Sheets(tbl(MyR, 16)).Range("A1").Offset(StR).Range(MyCA(i)).Value = "=HYPERLINK(""" & MyPath & """,""" & tbl(MyR, i + 1) & """)" Else ★ Sheets(tbl(MyR, 16)).Range("A1").Offset(StR).Range(MyCA(i)).Value = tbl(MyR, i + 1) End If End If Next End Sub プロジェクト毎のシートへの転記の時に止まってしまうので Call 転記(MyCA, tbl, i, StR, MyPath & "¥" & MyBkN)部分に追記したりしてみたのですが、 どうにもうまく動かず… どうしたらいいのかご教示いただけないでしょうか? 度々のお願いで申し訳ありませんがよろしくお願いいたします。 (苦戦4日目) ---- 解決できました。 (苦戦4日目) ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201307/20130708214606.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97054 documents and 608267 words.

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