Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9558 / 13644 ツリー ←次へ | 前へ→

【26670】変更内容を他のブックに反映させるには にしもり 05/7/13(水) 18:10 質問[未読]
【26680】Re:変更内容を他のブックに反映させるには ponpon 05/7/14(木) 0:40 発言[未読]
【26701】Re:変更内容を他のブックに反映させるには にしもり 05/7/14(木) 12:11 お礼[未読]

【26670】変更内容を他のブックに反映させるには
質問  にしもり  - 05/7/13(水) 18:10 -

引用なし
パスワード
   こんにちは。

<仕様>
Excelファイルが2つあります。
一方は「勤務予定表」で、他方の内容に応じてかき換えたいファイルです。
A3に「社員コード」と入っています。
H3に「1」と入っています。右にむかって日が進み、長の月だとAL3列に「31」と入っています。
5行目以降にレコードが入っています。A列には社員コードがaa0001などと入っています。
レコード部分は出勤情報である「休み」「前休」「慶弔休」などと入っています。
他方は「変更内容」で、一方を書き換えたい社員のみの出勤情報が載っています。
B列に「社員コード」、D列に「日付 アンダースコア 出勤情報」が入っています。

<規則性>
たとえば
「変更内容」のB2にaa0001、D2に「1日_休み」とあったら
「勤務予定表」のaa0001の行のH列に「休み」と書き換えたいのです。
「変更内容」のB3にdd0001、D3に「10日_前休」とあったら
「勤務予定表」のdd0002の行のQ列に「前休」と書き換えたいのです。
「変更内容」のB4にee0001、D4に「10日_慶弔休」とあったら
「勤務予定表」のee0005の行のQ列に「慶弔休」と書き換えたいのです。

下記のような骨子をかんがえました。(まだプログラムになっていません。)

Sub Macro2()

Dim E As Long
Dim R As Variant
Dim V As Long
Dim W As Long
Dim S As Long
Dim T As Long

  Windows("変更内容.xls").Activate
  Range("B2").Select
  Range(Selection.Selection.End(xlDown)).Select
  
  R = Selection.End(xlDown)
  V = Selection.Value
  
  For E = 2 To R
    Windows("勤務予定表.xls").Activate
       
    For T = 1 To 31
  
      W = Selection.Value
      If V = W Then
      
  '    勤務予定表.xlsを変更内容.xls"でかきかえる。
       ActiveCell.Paste
       
      Else
        Windows("変更内容.xls").Activate
        
        Range(T & R).Select
        S = Range(T & R).Value
        Range(Selection.Selection.End(xlToRight)).Select
        
      End If
    
    Next
    T = T + 1

  Next
  E = E + 1

End Sub

このような場合Forでループさせるのがいいのか自信がありません。
もっとよいループのさせかたがあったらどうかご教示ください。

【26680】Re:変更内容を他のブックに反映させるには
発言  ponpon  - 05/7/14(木) 0:40 -

引用なし
パスワード
   ▼にしもり さん:
こんばんは。ponponです。

懲りずに回答しています。
for eachを使ったり、findやmatchを使った方が、早いと思いますが、
ちょっと考える時間がなかったので、普通に回してます。
何とかこれでいけると思います。
二つのブックを開いて実行してください。

Sub test()
  Dim SH1 As Worksheet
  Dim SH2 As Worksheet
  Dim myRow1 As Long
  Dim myRow2 As Long
  Dim myVal As String
  Dim Yasumi As String
  Dim Hiduke As Integer
  
  Set SH1 = Workbooks("勤務予定表.xls").Worksheets("sheet1")
  Set SH2 = Workbooks("変更内容.xls").Worksheets("sheet1")
  myRow1 = SH1.Range("A65536").End(xlUp).Row
  myRow2 = SH2.Range("B65536").End(xlUp).Row
 
  For i = 5 To myRow1
   For j = 2 To myRow2
    If SH1.Cells(i, 1).Value = SH2.Cells(j, 2).Value Then
      myVal = SH2.Cells(j, 2).Offset(0, 2)
      If IsEmpty(myVal) Then Exit Sub
      Yasumi = Right(myVal, Len(myVal) - InStr(myVal, "_"))
      Hiduke = Val(Left(myVal, InStr(myVal, "_") - 2))
      SH1.Cells(i, 1).Offset(0, Hiduke + 6).Value = Yasumi
    End If
   
   Next j
  Next i
End Sub

【26701】Re:変更内容を他のブックに反映させるには
お礼  にしもり  - 05/7/14(木) 12:11 -

引用なし
パスワード
   ▼ponpon さん:
つたない質問のしかたにもかかわりませず、どうも本当にありがとうございました。
for each やfindというのがあるのですね。
今の力ではまだできないとおもいますが、forを使ってできるかぎり自力で進めてみます。

9558 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free