[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数列の同一内容セルの行を揃えるマクロ』(初心者)
宜しくお願いします。 ソートの昇順で各下記並びになっているデータに付いて、 A列 B列 1111 1111 1112 1112 1114 1113 1115 1115 1116 1116 1117 1118 1118 1119
一括で下記のように同一内容のセルの行を揃えたいのですが、 どのようにしたら良いでしょうか?
A列 B列 1111 1111 1112 1112 1113 1114 1115 1115 1116 1116 1117 1118 1118 1119
Windows7 Excel2007
VBAの一例
Sub test() Dim a, i As Long, ii As Long, w(), x As Object, n As Long With Range("a1").CurrentRegion a = .Value With CreateObject("System.Collections.SortedList") For ii = 1 To UBound(a, 2) For i = 1 To UBound(a, 1) If Not IsEmpty(a(i, ii)) Then If Not .Contains(a(i, ii)) Then ReDim w(1 To UBound(a, 2) * 2, 1 To 1) Else w = .Item(a(i, ii)) End If n = w(UBound(a, 2) + ii, 1) + 1 If UBound(w, 2) < n Then ReDim Preserve w(1 To UBound(w, 1), 1 To n) End If w(ii, n) = a(i, ii) w(UBound(a, 2) + ii, 1) = n .Item(a(i, ii)) = w End If Next Next Set x = .Clone: n = 0 End With With .Offset(, .Columns.Count + 1).Cells(1) .CurrentRegion.ClearContents For i = 0 To x.Count - 1 w = x.GetByIndex(i) .Offset(n).Resize(UBound(w, 2), UBound(a, 2)).Value = _ Application.Transpose(w) n = n + UBound(w, 2) Next End With End With Set x = Nothing End Sub (seiya)
ありがとうございます。 やりたいことが完璧に実現できました。 手動でやるとかなり時間がかかっていたので、 助かりました。 (初心者)
上記でseiya様に教えていただいたマクロですが、 たとえば、 A列 B列 C列 D列 E列 F列 1111 1111 *** *** *** *** 1112 1112 1114 1113 1115 1115 1116 1116 1117 1118 1118 1119 とあり、ABC列グループとDEF列グループで、3つとも合致するものの行を揃えるように 応用したいのですが、複雑すぎて正直全く手が出ません。 (ABCは、今日のデータで、DEFは、昨日のデータでお互いに比較できるものです) どなたか、ご教授をよろしくお願いします。
(初心者)
元データを具体的に提示して、結果をどのようにしたいのか解るように説明してください。 (seiya)
ありがとうございます。 やりたいことは、下記のとおりです。
A列 B列 C列 D列 E列 F列
1行目 果物 リンゴ 10円 果物 すいか 100円
2行目 果物 みかん 30円 果物 リンゴ 10円 3行目 果物 レモン 30円 果物 リンゴ 30円 4行目 野菜 キャベツ 40円 果物 レモン 30円 5行目 野菜 イモ 20円 野菜 キャベツ 40円 6行目 果物 イチゴ 80円 果物 イチゴ 70円 7行目 野菜 トマト 5円 果物 イモ 30円
これを
A列 B列 C列 D列 E列 F列 1行目 果物 すいか 100円 2行目 果物 リンゴ 10円 果物 リンゴ 10円 3行目 果物 リンゴ 30円 4行目 果物 みかん 30円 5行目 果物 レモン 30円 果物 レモン 30円 5行目 野菜 キャベツ 40円 野菜 キャベツ 40円 6行目 野菜 イモ 20円 7行目 果物 イチゴ 80円 8行目 果物 イチゴ 70円 9行目 野菜 トマト 5円 10行目 果物 イモ 30円 わかり辛いと思いますが、ABC列の内容とDEF列の内容が三つともあっている 行を合わせたいのです。 よろしくお願いします。
(初心者)
こんな感じすか?
Sub test() Dim a, i As Long, ii As Long, iii As Long Dim w(), x, n As Long, txt As String With Range("a1").CurrentRegion a = .Value With CreateObject("Scripting.Dictionary") For ii = 1 To UBound(a, 2) Step 3 For i = 1 To UBound(a, 1) If Len(a(i, ii) & a(i, ii + 1) & a(i, ii + 2)) > 0 Then txt = Join$(Array(a(i, ii), a(i, ii + 1), a(i, ii + 2)), ";;") If Not .exists(txt) Then ReDim w(1 To 3) .Item(txt) = w Else w = .Item(txt) ReDim Preserve w(1 To UBound(w, 1) + 3) End If For iii = 1 To 3 w(UBound(w) - 3 + iii) = a(i, iii + ii - 1) Next .Item(txt) = w End If Next Next x = .items: n = 0 End With With .Offset(, .Columns.Count + 1).Cells(1) .CurrentRegion.ClearContents For i = 0 To UBound(x) .Offset(n).Resize(, UBound(x(i))).Value = x(i) n = n + 1 Next End With End With End Sub (seiya)
本当にお世話なりました。 ありがとうございます。 やりたいことができました。 整理した列が、H,I,J,K,L,Mに出てきますが、 不定期だと思うのですが、一部、N、O、PにもK,L.Mと同内容の セルが出てきます。 どのような理由が考えられるでしょうか? やりたいことは出来ましたので、お時間があるときに、 ご教授をよろしくお願いします。 (初心者)
1,2,3 4,5,6 という3列単位で連結した文字列を基準にしています。 例 果物;;リンゴ;;10円 果物;;みかん;;30円
これをキーとして、重複があれば同じ行に転記します。 重複が3っつ以上になれば当然 NOP QRS ... と増えていきますよ?
その辺の説明が無いので... (seiya)
わかりました。作業が効率化できます。 本当にありがとうございました。
(初心者)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.