Excel VBA質問箱 IV

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

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


261 / 13179 ツリー ←次へ | 前へ→

【78679】よろしくお願いいたします。 斉藤 16/12/16(金) 22:12 質問[未読]

【78697】Re:よろしくお願いいたします。 斉藤 16/12/18(日) 20:00 発言[未読]
【78698】Re:よろしくお願いいたします。 β 16/12/18(日) 20:03 発言[未読]
【78699】Re:よろしくお願いいたします。 β 16/12/18(日) 20:12 発言[未読]
【78700】Re:よろしくお願いいたします。 β 16/12/18(日) 20:20 発言[未読]
【78703】Re:よろしくお願いいたします。 斎藤 16/12/19(月) 23:26 お礼[未読]

【78697】Re:よろしくお願いいたします。
発言  斉藤 E-MAIL  - 16/12/18(日) 20:00 -

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

本当に何度も申し訳ありません。
今回はEXCEL2007を使用させて頂きました。

> ですので、会社の 2013 による検証、よろしくお願いしますね

承知致しました。
砂時計となり、処理を繰り返しているようです。

ただ、まずは2013で動作検証してからで、報告させていただきますので、それからで結構です。

引き続きよろしくお願い致します。

【78698】Re:よろしくお願いいたします。
発言  β  - 16/12/18(日) 20:03 -

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

こちらで、今、パターンを変えて実行すると、型が一致しないというエラーが再現しました。
偉そうにいっていましたが、どこかにバグがあるわけですね。

調べま〜す。(ごめんなさい)

【78699】Re:よろしくお願いいたします。
発言  β  - 16/12/18(日) 20:12 -

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

原因がわかったようです。
今までのテストパターンでは Q列の文字列連結結果の桁数が小さかったのですが
これを、元データの桁数を長くし、かつ、A列が同じものをたくさん作って実行。
結果、Q列の文字数が長くなって、これは、そのままセットすれば問題がないのですが
Transposeを掛けたとき、その制限に引っかかったようです。

Sample1,2,3 とも、そのエラー対応をした上で、後ほどアップします。

【78700】Re:よろしくお願いいたします。
発言  β  - 16/12/18(日) 20:20 -

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

迷惑かけました。
改訂版です。お試しください。

Transpose 要素数の制限は認識していましたが、要素内の文字の桁数制限は
はじめて認識しました。

勉強になりました。

Sub Sample()
  Dim c As Range
  Dim dic1 As Object
  Dim dic2 As Object
  Dim w As Variant
  Dim v As Variant
  Dim x As Long
  
  Set dic1 = CreateObject("Scripting.Dictionary")
  Set dic2 = CreateObject("Scripting.Dictionary")
 
  With Sheets("Sheet1")
    For Each c In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
      If Not dic1.exists(c.Value) Then
        dic1(c.Value) = c.EntireRow.Range("A1:P1").Value
        dic2(c.Value) = c.EntireRow.Range("Q1").Value
      Else
        dic2(c.Value) = dic2(c.Value) & "," & c.EntireRow.Range("Q1").Value
      End If
    Next
  End With
 
  With Sheets("Sheet2")
    .Cells.ClearContents
    .Range("A1:P1").Resize(dic1.Count).Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(dic1.items))
    w = dic2.items
    ReDim v(0 To UBound(w, 1), 1 To 1)
    For x = 0 To UBound(w, 1)
      v(x, 1) = w(x)
    Next
    .Range("Q1").Resize(dic2.Count).Value = v
    .Select
  End With
 
End Sub

Sub Sample2()
  Dim c As Range
  Dim dic As Object
  Dim v As Variant
  Dim w As Variant
  Dim x As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
 
  With Sheets("Sheet1")
    v = .Range("A1").CurrentRegion.Columns("A:P").Value
    For Each c In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
      If Not dic.exists(c.Value) Then
        dic(c.Value) = c.EntireRow.Range("Q1").Value
      Else
        dic(c.Value) = dic(c.Value) & "," & c.EntireRow.Range("Q1").Value
      End If
    Next
  End With
 
  With Sheets("Sheet2")
    .Cells.ClearContents
    .Range("A1").Resize(UBound(v, 1), UBound(v, 2)).Value = v
    .Columns("A:P").RemoveDuplicates Columns:=1, Header:=xlYes
    w = dic.items
    ReDim v(0 To UBound(w, 1), 1 To 1)
    For x = 0 To UBound(w, 1)
      v(x, 1) = w(x)
    Next
    .Range("Q1").Resize(dic.Count).Value = v
    .Select
  End With
End Sub

Sub Sample3()
  Dim c As Range
  Dim dic As Object
  Dim w As Variant
  Dim v As Variant
  Dim x As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
 
  With Sheets("Sheet1")
    For Each c In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
      If Not dic.exists(c.Value) Then
        dic(c.Value) = c.EntireRow.Range("Q1").Value
      Else
        dic(c.Value) = dic(c.Value) & "," & c.EntireRow.Range("Q1").Value
      End If
    Next
  End With
 
  With Sheets("Sheet2")
    .Cells.ClearContents
    Sheets("Sheet1").Columns("A:P").AdvancedFilter Action:=xlFilterCopy, _
      CopyToRange:=.Range("A1"), Unique:=True
    w = dic.items
    ReDim v(0 To UBound(w, 1), 1 To 1)
    For x = 0 To UBound(w, 1)
      v(x, 1) = w(x)
    Next
    .Range("Q1").Resize(dic.Count).Value = v
    .Select
  End With
  
End Sub

【78703】Re:よろしくお願いいたします。
お礼  斎藤  - 16/12/19(月) 23:26 -

引用なし
パスワード
   こんばんは。
遅くなりまして、申し訳ありません。

2013で確認したところ、sample3が問題なく動作しました。
こちらを使用させていただきます。
sheet名については、手間ではないためこのまま行かせていただきます。
最後までお付き合い下さり、感謝しております。
この度は本当にお世話になりました。

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