Excel VBA質問箱 IV

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

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


886 / 13645 ツリー ←次へ | 前へ→

【77733】文字入力を行ないたい さとし 15/12/11(金) 8:10 質問[未読]
【77734】Re:文字入力を行ないたい ウッシ 15/12/11(金) 10:54 回答[未読]
【77736】Re:文字入力を行ないたい さとし 15/12/11(金) 20:06 お礼[未読]

【77733】文字入力を行ないたい
質問  さとし  - 15/12/11(金) 8:10 -

引用なし
パスワード
   book1を立ち上げて、得意先pとフォーマットiを立ち上げます
EXCEL2010です

得意先pのsheet1のA1から最下行(不定)に数字があり、
その数字を含む行のBAに文字(新品、代替、返品)があります
フォーマットiには6つのシートがあり、6つのシートのいずれかのT列に、
得意先pのA1から最下行(不定)の数字があった時に、I列に文字を
入力したく思います(I列は元々空白です)

文字はsheet名+得意先pのBAにある文字(新品、代替、返品)を入れます

フォーマットiは、以下のシートで構成されています

左側より、漬物、惣菜、スイーツ、カップ麺、見切品、フライ です

惣菜シートのT列は、T4、T38、T72…と言った形で、34行毎にあります
惣菜シートのI列は、I2、I36、I70…と言った形で、34行毎にあります
T4とI2が紐づき、T38とI36が紐づき、T72とI70が紐づきます

惣菜シート以外のT列は、T5、T25、T45…と言った形で、20行毎にあります
惣菜シート以外のI列は、I2、I22、I42…と言った形で、20行毎にあります
T5とI2が紐づき、T25とI22が紐づき、T45とI42が紐づきます

例えば、得意先pのA1に1000があり、BAに新品とあります
フォーマットiの惣菜シートのT38に1000があったら、
I36に惣菜新品と入力します

例えば、得意先pのA4に1500があり、BAに変更とあります
フォーマットiの漬物シートのT25に1500があったら、
I22に漬物代替と入力します

数字の体系でシートを指定しているのではなく、6つのシートのいずれかに
ありますので6つのシート内を探して、VBAで行ないたく思います
book1にコードを実装します

ご教授下さい

【77734】Re:文字入力を行ないたい
回答  ウッシ  - 15/12/11(金) 10:54 -

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

Sub test()
  Dim bk1 As Workbook
  Dim bk2 As Workbook
  Dim s  As Worksheet
  Dim p  As String
  Dim d  As Range
  
  p = ThisWorkbook.Path & "\"
  
  Application.ScreenUpdating = False
  
  Set bk1 = Workbooks.Open(p & "得意先p.xlsx")
  Set d = bk1.Worksheets("Sheet1").Range("A:A")
  
  Set bk2 = Workbooks.Open(p & "フォーマットi.xlsx")
  
  For Each s In bk2.Worksheets
    If s.Name = "惣菜" Then
      Call test1(d, s, 4, 2, 34)
    Else
      Call test1(d, s, 5, 2, 20)
    End If
  Next
  
  Application.ScreenUpdating = True

End Sub
Sub test1(tR As Range, sh2 As Worksheet, t As Long, i As Long, g As Long)
  Dim v As Variant
  Dim r As Long
  Dim o As Long
  
  o = i - t
  With sh2
    For r = t To .Range("T" & Rows.Count).End(xlUp).Row Step g
      v = Application.Match(.Range("T" & r), tR, 0)
      If IsError(v) = False Then
        .Range("T" & r).Offset(o, -11).Value = _
          sh2.Name & tR(v, 1).EntireRow.Range("BA1").Value
      End If
    Next
  End With
End Sub

こんな感じでしょうか?

【77736】Re:文字入力を行ないたい
お礼  さとし  - 15/12/11(金) 20:06 -

引用なし
パスワード
   ウッシ様
回答ありがとうございます

解決しました
ありがとうございました
また宜しくお願いします

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