Excel VBA質問箱 IV

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

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


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

【82088】2つのシートのデータをまとめる作業 ace 22/11/7(月) 13:40 質問[未読]
【82089】Re:2つのシートのデータをまとめる作業 マナ 22/11/8(火) 18:55 発言[未読]
【82091】Re:2つのシートのデータをまとめる作業 ace 22/11/9(水) 14:03 質問[未読]
【82092】Re:2つのシートのデータをまとめる作業 マナ 22/11/9(水) 18:56 発言[未読]
【82093】Re:2つのシートのデータをまとめる作業 ace 22/11/11(金) 16:55 質問[未読]
【82094】Re:2つのシートのデータをまとめる作業 マナ 22/11/11(金) 19:23 発言[未読]
【82096】Re:2つのシートのデータをまとめる作業 ace 22/11/14(月) 10:46 質問[未読]
【82098】Re:2つのシートのデータをまとめる作業 マナ 22/11/16(水) 20:39 発言[未読]
【82100】Re:2つのシートのデータをまとめる作業 ace 22/11/18(金) 14:22 お礼[未読]

【82088】2つのシートのデータをまとめる作業
質問  ace  - 22/11/7(月) 13:40 -

引用なし
パスワード
   見出、詳細の2つのシートがあり、
今までは手作業で、見出Sheetの(年度)、(No.)で並べ替え、
詳細Sheetの(年度)、(No.)、(SEQ)で並べ替えてから
コピペで⇒「あ , い , う , え」や「あ(A),い(B),う(R),え(W)」を作成していました

毎月、300〜400行くらいやっていましたが、もしVBAで可能であれは助かります
宜しくお願い致します
※詳細SheetのSEQは1〜N個の任意で1個の時もあれば30個くらいの時もあります
※項目、結果は共に文字列です

(見出Sheet)                
   B列     C列    E列   F列
1行 依頼者No.  現場No.  年度   No.
2行 12345    1     2022   6789
3行 12345    2     2022   6790
4行 12345    3     2022   6791
5行 23456    1     2022   6792
6行 34567    1     2022   6793


(詳細Sheet)                            
   B列    C列   E列   F列    G列 M列  N列
1行 依頼者No. 現場No. 年度   No.    SEQ 項目 結果
2行 12345   1    2022   6789   1  あ  A
3行 12345   1    2022   6789   2  い  B
4行 12345   1    2022   6789   3  う  R
5行 12345   1    2022   6789   4  え  W
6行 12345   2    2022   6790   1  た  C
7行 12345   2    2022   6790   2  ち  D
8行 12345   3    2022   6791   1  つ  F
9行 23456   1    2022   6792   1  あ  G
10行 34567   1    2022   6793   1  あ  S


(見出Sheet)最終表示                        
   B列    C列   E列   F列  AA列        AB列
1行 依頼者No. 現場No. 年度  No.  項目        項目+結果
2行 12345   1    2022  6789  あ , い , う , え あ(A),い(B),う(R),え(W)
3行 12345   2    2022   6790  た , ち      た(C),ち(D)
4行 12345   3    2022   6791  つ         つ(F)
5行 23456   1    2022   6792  あ         あ(G)
6行 34567   1    2022   6793  あ         あ(S)


わかりずらい表ですみません

【82089】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/8(火) 18:55 -

引用なし
パスワード
   ▼ace さん:
>
Option Explicit

Sub test()
  Dim dic As Object
  Dim 見出Sht As Worksheet, 詳細Sht As Worksheet
  Dim r As Range, w() As String, v
  Dim k As Long
  Dim No As String, idx As Long, s1 As String, s2 As String
  
  Set dic = CreateObject("scripting.dictionary")
  Set 見出Sht = Worksheets("見出")
  Set 詳細Sht = Worksheets("詳細")
  
  Set r = 見出Sht.Columns("E").SpecialCells(xlCellTypeConstants).Resize(, 2)
  ReDim w(1 To r.Rows.Count, 1 To 2)
  v = r.Value
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2)  '年度_No,
    idx = k
    If Not dic.exists(No) Then dic(No) = idx
  Next
  
  Set r = 詳細Sht.Columns("E").SpecialCells(xlCellTypeConstants).Resize(, 10)
  v = r.Value
  v = WorksheetFunction.Sort(v, 3, 1, False) 'G列(SEQ)でソート
  
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2)  '年度_No,
    If dic.exists(No) Then
      idx = dic(No)
      s1 = v(k, 9)  '項目
      s2 = v(k, 10)  '結果
      s2 = s1 & "(" & s2 & ")"
      w(idx, 1) = IIf(w(idx, 1) = "", s1, w(idx, 1) & "," & s1)
      w(idx, 2) = IIf(w(idx, 2) = "", s2, w(idx, 2) & "," & s2)
    End If
  Next

  Set r = 見出Sht.Columns("AA:AB")
  r.ClearContents
  r.Resize(UBound(w)).Value = w
  r.AutoFit
  
End Sub

【82091】Re:2つのシートのデータをまとめる作業
質問  ace  - 22/11/9(水) 14:03 -

引用なし
パスワード
   マナさん、ご回答ありがとうございます。

私の会社のPCが古くて、Excel2007-2016でして、この関数が使用できないようです

v = WorksheetFunction.Sort(v, 3, 1, False) 'G列(SEQ)でソート

Worksheets(“詳細”).sort.sortfields.add key:=range(…..
   Sorting:=xlsortonvalues, Oder:=xlAscending,dataoption:=xlsortnormal
みたいな感じじゃ無いとダメそうです


ご面倒、お掛けしますが古いExcelでも使用可能な関数を
どのように組み込めばよいか、教えて頂きたいです

【82092】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/9(水) 18:56 -

引用なし
パスワード
   ▼ace さん:

>v = r.Value
>v = WorksheetFunction.Sort(v, 3, 1, False) 'G列(SEQ)でソート
  ↓
With r.Offset(, 9999)  '右側の空き領域を作業セルとして使用
  .Value = r.Value
  .Sort .Columns(3)
  v = .Value
  .Clear
End With




【82093】Re:2つのシートのデータをまとめる作業
質問  ace  - 22/11/11(金) 16:55 -

引用なし
パスワード
   マナ様、ありがとうございました
うまく行きました

わがままついでに、もう少しお付き合いください

Q1
(データ内容)
両シートD列に証区分があり、ここにA,B,C,D,E,F,G,Hと文字が入っています


年度+No+(SEQ)だけで判断すると、

D列のAのNOが1のものと、D列のBのNOが1のもの、D列のCのNOが1が同じものと判断されてしまう不具合が発生していまいました

これを解決するには年度+証区分+No+(SEQ)にしたいのですが
どうしたよいででしょうか?

Q2
G列の日付、例えば2022/11/11が入力されているのですが、見出シートのA列に「22/11-(P列の文字列)」を作成したいのですが、教えて頂けないでしょうか

宜しくお願いします

【82094】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/11(金) 19:23 -

引用なし
パスワード
   ▼ace さん:

サンプルデータを使って説明してください。

【82096】Re:2つのシートのデータをまとめる作業
質問  ace  - 22/11/14(月) 10:46 -

引用なし
パスワード
   マナ さん、分かりづらくて申し訳ありません

(見出Sheet)                                                    
A列  B列    C列   D列  E列    F列    H列     P列        
    依頼者No. 現場No. 証区分 年度   No.    日付     依頼者+現場名        
    12345   1   A   2022   6789   2022/11/1  A(株)手前        
    12345   2   A   2022   6790   2022/11/1  A(株)中間       
    12345   3   A   2022   6791   2022/11/1  A(株)出口        
    23456   1   A   2022   6792   2022/11/2  B(株)玄関        
    34567   1   A   2022   6793   2022/11/2  B(株)勝手口        
    45678   1   B   2022   6789   2022/11/1  C(株)入口        
    45678   2   B   2022   6790   2022/11/1  C(株)出口        
    56789   1   C   2022   6789   2022/11/1  B(株)天井        
                                    
(詳細Sheet)                                                                
   A列  B列     C列     D列    E列    F列    G列    M列    N列    
     依頼者No.   現場No.  証区分  年度    No.    SEQ    項目    結果    
     12345     1     A    2022    6789    1    あ    A    
     12345     1     A    2022    6789    2    い    B    
     12345     1     A    2022    6789    3    う    R    
     12345     1     A    2022    6789    4    え    W    
     12345     2     A    2022    6790    1    た    C    
     12345     2     A    2022    6790    2    ち    D    
     12345     3     A    2022    6791    1    つ    F    
     23456     1     A    2022    6792    1    あ    G    
     34567     1     A    2022    6793    1    あ    S    
     45678     1     B    2022    6789    1    か    Z    
     45678     2     B    2022    6790    1    き    P    
     45678     2     B    2022    6790    2    く    Q    
     56789     1     C    2022    6789    1    お    E    
                                    
(見出Sheet)最終表示                                                            
A列          B列   C列     D列     E列    F列    H列    P列       AA列        AB列
          依頼者No. 現場No. 証区分  年度    No.    日付     依頼者+現場名   項目      項目+結果
22/11 A(株)手前   12345  1    A    2022    6789   2022/11/1   A(株)手前    あ , い , う , え  あ(A),い(B),う(R),え(W)
22/11 A(株)中間   12345  2    A    2022    6790   2022/11/1   A(株)中間    た , ち   た(C),ち(D)
22/11 A(株)出口   12345  3    A    2022    6791   2022/11/1   A(株)出口     つ      つ(F)
22/11 B(株)玄関   23456  1    A    2022    6792   2022/11/2   B(株)玄関    あ     あ(G)
22/11 B(株)勝手口  34567  1    A    2022    6793   2022/11/2   B(株)勝手口   あ     あ(S)
22/11 C(株)入口   45678  1    B    2022    6789   2022/11/1   C(株)入口    か     か(Z)
22/11 C(株)出口   45678  2    B    2022    6790   2022/11/1   C(株)出口    き , く   き(P),く(Q)
22/11 B(株)天井   56789  1    C    2022    6789   2022/11/1   B(株)天井    お     お(E)
                                    
1.(見出Sheet)と(詳細Sheet)の共通点は「年度」-「証区分」-「No.」-「現場No.」なので並べ替えをします((詳細Sheet)は「SEQ」も加えます)                                    
上記が同じ場合、「SEQ」の1から順に「あ , い , う , え」と「項目カンマ項目・・」のように加えていく感じです                                    
                                    
加えて(見出Sheet)A列にH列:日付+P列:依頼者+現場名を入力する(日付はYY/MMのみ)                                    
                                    
前回、証区分を加えた分類が出来ていなかった(お願いしていなかった)為、                                    
Aの2022の6789の現場1とB2022の6789の現場1とCの2022の現場1が一緒のものと判断されてしまいました                                    
例「あ , い , う , え , か , お」・・・×                                    
   ↓                                    
 「あ , い , う , え」・・・〇                                    
 「か」・・・〇                                    
 「お」・・・〇

【82098】Re:2つのシートのデータをまとめる作業
発言  マナ  - 22/11/16(水) 20:39 -

引用なし
パスワード
   ▼ace さん:

Sub test()
  Dim dic As Object
  Dim 見出Sht As Worksheet, 詳細Sht As Worksheet
  Dim r As Range, w() As String, v
  Dim k As Long
  Dim No As String, idx As Long, s1 As String, s2 As String
 
  Set dic = CreateObject("scripting.dictionary")
  Set 見出Sht = Worksheets("見出")
  Set 詳細Sht = Worksheets("詳細")
 
  Set r = 見出Sht.Columns("D").SpecialCells(xlCellTypeConstants).Resize(, 3)
  ReDim w(1 To r.Rows.Count, 1 To 3)
  v = r.Value
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2) & "_" & v(k, 3)   '証区分_年度_No,
    idx = k
    If Not dic.exists(No) Then dic(No) = idx
  Next
 
  Set r = 詳細Sht.Columns("D").SpecialCells(xlCellTypeConstants).Resize(, 11)
  With r.Offset(, 9999)  '右側の空き領域を作業セルとして使用
    .Value = r.Value
    .Sort .Columns(4)
    v = .Value
    .Clear
  End With

 
  For k = 1 To UBound(v)
    No = v(k, 1) & "_" & v(k, 2) & "_" & v(k, 3)   '証区分_年度_No,
    If dic.exists(No) Then
      idx = dic(No)
      s1 = v(k, 10)  '項目
      s2 = v(k, 11)  '結果
      s2 = s1 & "(" & s2 & ")"
      w(idx, 1) = IIf(w(idx, 1) = "", s1, w(idx, 1) & "," & s1)
      w(idx, 2) = IIf(w(idx, 2) = "", s2, w(idx, 2) & "," & s2)
    End If
  Next

  Set r = 見出Sht.Columns("AA:AB")
  r.ClearContents
  r.Resize(UBound(w)).Value = w
  r.AutoFit
  
  Set r = 見出Sht.Columns("A")
  r.Resize(UBound(w)).Formula = "=text(h1,""yy/mm"")&p1"
 
End Sub

【82100】Re:2つのシートのデータをまとめる作業
お礼  ace  - 22/11/18(金) 14:22 -

引用なし
パスワード
   マナさん、ありがとうございました

求めていたもの、完璧です

私も少しずつ、vbaを勉強していきたいと思います

本当にありがとうございました

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