Excel VBA質問箱 IV

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

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


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

【10572】抽出したい koshimizu 04/2/2(月) 14:34 質問
【10588】Re:抽出したい INA 04/2/3(火) 8:40 回答
【10594】Re:抽出したい koshimizu 04/2/3(火) 10:37 質問
【10603】Re:抽出したい Jaka 04/2/3(火) 12:23 回答
【10611】Re:抽出したい koshimizu 04/2/3(火) 16:38 お礼
【10700】Re:抽出したい Jaka 04/2/9(月) 9:49 回答
【10707】Re:抽出したい koshimizu 04/2/9(月) 16:12 お礼

【10572】抽出したい
質問  koshimizu  - 04/2/2(月) 14:34 -

引用なし
パスワード
   こんにちは。
Sheet1のような表があります。Sheet2のような表にしたいのですが。

Sheet1
A列  B列   C列    D列   E列      
店名    2/2日       2/3日   B列C列結合 1週間分有りま
a店  鈴木太郎 青木二郎  青柳一郎 芥川三郎
b店  茂木五郎      鈴木太郎 茂木五郎
c店  青柳一郎 芥川三郎  青木二郎

Sheet2
A列   B列  C列   D列   E列
氏名   2/2 2/3  2/4  2/5
鈴木太郎  a店  b店
青木二郎  a店  c店
青柳一郎  c店  a店        
芥川三郎  c店  a店
茂木五郎  b店  b店

Sheet2の氏名は入力済です。

【10588】Re:抽出したい
回答  INA  - 04/2/3(火) 8:40 -

引用なし
パスワード
   >したいのですが。

ご自分ではどこまで出来ていて、何が分からなくてご質問されたのですか?
マクロ作成依頼の丸投げ行為は、あまり歓迎されませんよ。

【10594】Re:抽出したい
質問  koshimizu  - 04/2/3(火) 10:37 -

引用なし
パスワード
   INA さん
こんにちは。
マクロは初心者です。基礎の講習会に参加し自動記録等を教えていただきました。
どこから始めたら良いかわかりません。
アドバイスお願いします。

【10603】Re:抽出したい
回答  Jaka  - 04/2/3(火) 12:23 -

引用なし
パスワード
   関数ですみません。

Sheet2

B2
=IF(ISERROR(MATCH($A2,Sheet1!B:B,0)),IF(ISERROR(MATCH($A2,Sheet1!
C:C,0)),"err",INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!C:C,0),1)),
INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!B:B,0),1))

C2
=IF(ISERROR(MATCH($A2,Sheet1!D:D,0)),IF(ISERROR(MATCH($A2,Sheet1!
E:E,0)),"err",INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!E:E,0),1)),
INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!D:D,0),1))

D2
=IF(ISERROR(MATCH($A2,Sheet1!F:F,0)),IF(ISERROR(MATCH($A2,Sheet1!
G:G,0)),"err",INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!G:G,0),1)),
INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!F:F,0),1))

E2
=IF(ISERROR(MATCH($A2,Sheet1!H:H,0)),IF(ISERROR(MATCH($A2,Sheet1!
I:I,0)),"err",INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!I:I,0),1)),
INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!H:H,0),1))

F2
=IF(ISERROR(MATCH($A2,Sheet1!J:J,0)),IF(ISERROR(MATCH($A2,Sheet1!
K:K,0)),"err",INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!K:K,0),1)),
INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!J:J,0),1))

G2
=IF(ISERROR(MATCH($A2,Sheet1!L:L,0)),IF(ISERROR(MATCH($A2,Sheet1!
M:M,0)),"err",INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!M:M,0),1)),
INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!L:L,0),1))

H2
=IF(ISERROR(MATCH($A2,Sheet1!N:N,0)),IF(ISERROR(MATCH($A2,Sheet1!
O:O,0)),"err",INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!O:O,0),1)),
INDEX(Sheet1!$A$1:$B$4,MATCH($A2,Sheet1!N:N,0),1))

時間が無いので、I2以降は自分でかいてね!

上記関数をSheet2の2行目に入れ、必要なところまでフィルドラッグ。
または、コピーしたいセルを選択して、セル右下にマウスポインタを当てて+になったところで、Wクリックすると左の列のデータ分だけコピーしてくれます。

半角文字は適度に改行してくれと起こられちゃったんで、まるっきり適当に改行してあります。

【10611】Re:抽出したい
お礼  koshimizu E-MAIL  - 04/2/3(火) 16:38 -

引用なし
パスワード
   Jaka さん
こんにちは。前回もありがとうございました。

いつも親切丁寧にお答えをいただきありがとうございます。
関数便利ですね。MATCH関数があることはわかっていたのですが
日時と場所が同時などでどのようにするのか手がつけれない状態でした。
INDEX関数勉強になりました。
Jaka さんの教えていただきました関数は意味も理解できerr(MATCHなし)も空白で
使用するつもりです。

これを使うのは生徒がボランティアで各福祉施設に行くための資料の1部になります。
今後ともよろしくお願いすると共に、この関数を次回より使用させていただきます。
本当にありがとうございました。

【10700】Re:抽出したい
回答  Jaka  - 04/2/9(月) 9:49 -

引用なし
パスワード
   日付も検索対象に加えてみました。    
Sheet1、2の日付がどうやって記入されているのか解らないと手が出ませんけど...。    
Sheet1、日付の表示形式が、「m/d"日"」    
Sheet2、日付の表示形式が、「3月4日」    
と、なっているとして。    

テスト環境がシート3だったもので、変えてください。    
She3 → She2    
Sheets("Sheet3") → Sheets("Sheet2")
She3XX → She2XX

データが同じパターンで増えて幾分には、Sheet2では255列までなら大丈夫ですが、256列はダメです。
それと、日付は年号からしっかり2004/2/2と書くようにした方が、後々の為に良いと思います。
関数で表示された日付は、マクロのFind検索でまともに引っかからないから...。
手動なら大体引っかかるみたいですが、マクロだと、いちいち日付の入っているセルを探して、表示形式まで調べてって事になりそうなんで...。
Match使えばいいじゃんと思えますが、一列または1行ずつしか調べられないし、ループ組むのにも面倒だし...。
日付と名前のどちらを優先に使用かと迷いましたが、日付優先にしました。
これって、表の構築と言うか検索対象がはっきり決まっていないというのが盲点ですね。

Sub koshi2()
  Dim She1 As Worksheet, She3 As Worksheet
  Dim She1EdR As Long, She3EdR As Long, She3EdC As Long
  Dim I As Long, II As Long
  Dim FindN As Range, FindRag As Range, SacRag As Range
  Dim SacCo As Variant
  
  Set She1 = Sheets("Sheet1")
  Set She3 = Sheets("Sheet3")
  She1EdR = She1.Range("A65536").End(xlUp).Row
  She3EdR = She3.Range("A65536").End(xlUp).Row
  She3EdC = She3.Range("IV1").End(xlToLeft).Column
  Set SacRag = She1.Range("A1", She1.Range("IV1").End(xlToLeft))
  
  For I = 2 To She3EdC
    SacCo = Application.Match(She3.Cells(1, I).Value2, SacRag, 0)
    If Not IsError(SacCo) Then
      Set FindRag = She1.Range(She1.Cells(2, SacCo), She1.Cells(She1EdR, SacCo + 1))
      For II = 2 To She3EdR
        If She3.Cells(II, 1).Value <> "" Then
         Set FindN = FindRag.Find(She3.Cells(II, 1).Value, LookAt:=xlWhole)
         If Not FindN Is Nothing Then
           She3.Cells(II, I).Value = She1.Cells(FindN.Row, 1).Value
         Else
           She3.Cells(II, I).Value = ""
         End If
        Else
         She3.Cells(II, I).Value = ""
        End If
      Next
    Else
      She3.Range(Cells(2, I), Cells(She3EdR, I)).Value = "日付Err"
    End If
  Next
  Set She1 = Nothing
  Set She3 = Nothing
  Set SacRag = Nothing
  Set FindRag = Nothing
  Set FindN = Nothing
End Sub

【10707】Re:抽出したい
お礼  koshimizu E-MAIL  - 04/2/9(月) 16:12 -

引用なし
パスワード
   Jaka さん
こんにちは。
いつも親切にありがとうございます。

早速ためしましたところ作動しています。
日付につきましてもJaka さんのご指摘のように2004/2/9で入力し
表示形式で2月9日にしています。
優先順位も生徒がいつ、どこに行くのかと言う表なのでこれでばっちりです。
ただし、マクロの内容は全くと言って良いくらいわかりません。
お願いですが、初心者に良い本等ありましたらお教えください。
本当にありがとうございます。今後ともよろしくお願い致します。

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