No.2ベストアンサー
- 回答日時:
No.1です。
前回のコードの
>wS.Range("A:A").TextToColumns Destination:=Range("A1"), _
>OtherChar:="_", FieldInfo:=Array(Array(1, 1), Array(2, 1))
の2行を
>wS.Range("A:A").TextToColumns Destination:=Range("A1"), _
>Tab:=True, Other:=True, OtherChar:="_", FieldInfo:=Array(Array(1, 1), Array(2, 1))
に変更してください。
前回のコードではB列に何もデータが表示されないと思います。
※ 細かい検証をしていませんでした。m(_ _)m
この回答へのお礼
お礼日時:2016/04/19 08:08
ご回答頂き有難うございます。
無事、表が生成できることを確認しました。
思ったよりだいぶ沢山の処理をしなければいけないんですね。
後でじっくり解析してみようと思います。
No.1ベストアンサー
- 回答日時:
こんばんは!
VBAになりますが、一例です。
元データはSheet1にあり、Sheet2に表示するとします。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から//
Dim i As Long, lastRow1 As Long, lastRow2 As Long
Dim c As Range, r As Range, wS As Worksheet
Set wS = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("E:E").Insert
.Range("E1") = "ダミー"
Range(.Cells(2, "E"), .Cells(lastRow1, "E")).Formula = "=A2&""_""&B2"
.Range("E:E").AdvancedFilter Action:=xlFilterCopy, _
copytorange:=wS.Range("A1"), unique:=True
wS.Range("A:A").Sort key1:=wS.Range("A1"), order1:=xlAscending, Header:=xlYes
.Range("C:C").AdvancedFilter Action:=xlFilterCopy, _
copytorange:=wS.Range("B1"), unique:=True
lastRow2 = wS.Cells(Rows.Count, "B").End(xlUp).Row
If lastRow2 > 1 Then
Range(wS.Cells(2, "B"), wS.Cells(lastRow2, "B")).Copy
wS.Range("C1").PasteSpecial Paste:=xlPasteValues, Transpose:=True
wS.Range("B:B").Clear
End If
For i = 2 To lastRow1
Set c = wS.Range("A:A").Find(what:=.Cells(i, "E"), LookIn:=xlValues, lookat:=xlWhole)
Set r = wS.Rows(1).Find(what:=.Cells(i, "C"), LookIn:=xlValues, lookat:=xlWhole)
wS.Cells(c.Row, r.Column) = .Cells(i, "D")
Next i
wS.Range("A:A").TextToColumns Destination:=Range("A1"), _
OtherChar:="_", FieldInfo:=Array(Array(1, 1), Array(2, 1))
wS.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
wS.Range("A1").ClearContents
For i = wS.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If wS.Cells(i, "A") = wS.Cells(i - 1, "A") Then
wS.Cells(i, "A").ClearContents
wS.Cells(i, "A").Borders(xlEdgeTop).LineStyle = xlNone
End If
Next i
.Range("E:E").Delete
End With
wS.Activate
wS.Columns.AutoFit
wS.Range("A1").Select
Application.ScreenUpdating = True
MsgBox "完了"
End Sub 'この行まで//
※ 関数でないのでデータ変更があるたびに
マクロを実行する必要があります。m(_ _)m
No.6
- 回答日時:
NO.3、5の方と同意見です
ピボットテーブルを使う方法が簡潔でしょう
注意点ですがデータが増減することが想定されるなら
データ選択領域を過分に取っておきましょう
例えば表のとおりなら選択エリアは「A1:D1000」
といったように入力数の上限を想定して選択し
別シートにピボットテーブルを貼り付けます
右下にガイド画面が表示されると思いますので
下部四分割の左上条件に空白を表示しない設定を
付け加えてください
データシートに入力等の変更があった際には
ピボットテーブルシートの表の上で右クリック
データの更新を押すと最新の情報に更新されます
No.4
- 回答日時:
解決されたようですが、参考になるところがあればと
標準モジュールに記述し、
アクティブシートを対象に処理し、
結果は新規シートに出力します
Public Sub Samp1()
Dim dic As Object, dicE As Object
Dim rng As Range, r As Range
Dim vA As Variant, v As Variant
Dim vK1 As Variant, vK2 As Variant
Dim i As Long, j As Long
Set dic = CreateObject("Scripting.Dictionary")
Set dicE = CreateObject("Scripting.Dictionary")
vA = Range("A1").CurrentRegion.Resize(, 4).Value
For i = 2 To UBound(vA)
If (Not dic.Exists(vA(i, 1))) Then
dic.Add vA(i, 1), CreateObject("Scripting.Dictionary")
End If
If (Not dic(vA(i, 1)).Exists(vA(i, 2))) Then
dic(vA(i, 1)).Add vA(i, 2) _
, CreateObject("Scripting.Dictionary")
End If
dic(vA(i, 1))(vA(i, 2))(vA(i, 3)) = vA(i, 4)
dicE(vA(i, 3)) = Empty
Next
i = 0
For Each vK1 In dic.Keys
i = i + dic(vK1).Count
Next
ReDim vA(1 To i + 1, 1 To dicE.Count + 2)
v = mySort(dicE.Keys)
For j = 0 To UBound(v)
i = j + 3
vA(1, i) = v(j)
dicE(v(j)) = i
Next
i = 2
For Each vK1 In mySort(dic.Keys)
vA(i, 1) = vK1
For Each vK2 In mySort(dic(vK1).Keys)
vA(i, 2) = vK2
For Each v In dic(vK1)(vK2).Keys
vA(i, dicE(v)) = dic(vK1)(vK2)(v)
Next
i = i + 1
Next
Next
Application.ScreenUpdating = False
With Worksheets.Add
With .Range("A1").Resize(UBound(vA), UBound(vA, 2))
.Value = vA
.Borders.LineStyle = xlContinuous
On Error Resume Next
Set rng = .Columns(1).SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If (Not rng Is Nothing) Then
For Each r In rng.Areas
If (r(1).Row > 1) Then
r.Borders(xlEdgeTop).LineStyle = xlNone
If (r.Rows.Count > 1) Then
r.Borders(xlInsideHorizontal).LineStyle = xlNone
End If
End If
Next
End If
End With
End With
Application.ScreenUpdating = True
Set dic = Nothing
Set dicE = Nothing
End Sub
Private Function mySort(ByVal vA As Variant) As Variant
Dim v As Variant
Dim i As Long, j As Long
For i = LBound(vA) To UBound(vA) - 1
For j = i + 1 To UBound(vA)
If (vA(i) > vA(j)) Then
v = vA(i)
vA(i) = vA(j)
vA(j) = v
End If
Next
Next
mySort = vA
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- Excel(エクセル) Excelで在庫表(クエリ、ピボット) 2 2022/04/11 17:11
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) 【詳しい方教えて下さい】EXCEL条件に一致する値の複数抽出 9 2022/04/29 10:56
- 英語 提示した結果構文が非文となる理由について 1 2022/07/25 12:22
- Excel(エクセル) [スライサー]に関して、 1 2022/05/24 21:07
- Excel(エクセル) 【Excelの集計について質問です。】 7 2022/12/03 16:51
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Excel(エクセル) Excelマクロの表示のExcel内をfindで検索 3 2022/06/15 20:07
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
Excelでシートの違うデータでグ...
-
複数シートからデータを拾って...
-
エクセルファイルのシート毎の容量
-
シート削除して同名シート追加...
-
EXCELで2つのファイルから重複...
-
エクセル 縦に長い表の印刷時...
-
Excelで日付変更ごとに、自動的...
-
トランジスタの選び方
-
オートフィルタで抽出したデー...
-
Excelですが、同一データが複数...
-
Excelマクロ 差分抽出の方法が...
-
【エクセルマクロ】複数シート...
-
excelマクロで複数シート間のデ...
-
Excelクエリで日付がうまく抽出...
-
EXCEL VBA 担当者毎にファイル作成
-
時間帯の重複を除いた集計について
-
Excelでテーブルを2次元の表に...
-
他のシートの一番下の行データ...
-
コンボボックスの参照先(ListF...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
Excelでシートの違うデータでグ...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
シート削除して同名シート追加...
-
VBAで CTRL+HOMEの位置へ移動...
-
Excelで日付変更ごとに、自動的...
-
トランジスタの選び方
-
EXCELで2つのファイルから重複...
-
【エクセルマクロ】複数シート...
-
他のシートの一番下の行データ...
-
エクセル 縦に長い表の印刷時...
-
エクセル VBA VLOOKUP
-
【エクセル」 特定のセルで条件...
-
【Excel】マクロでグラフ系列に...
-
エクセルで名簿を50音で切り分ける
-
Excelマクロ 差分抽出の方法が...
-
時間帯の重複を除いた集計について
-
オートフィルタで抽出したデー...
-
Excel 売上管理シートに入力し...
おすすめ情報