いつもお世話になっております。
Excel2013を使用しておりますので、どうかアドバイスをお願いします。
sheet1: データがある表
sheet2: sheet1のデータを転記する表
両方とも項目が1行目にあります。
sheet1
A 列 B C D E F
商品名 店舗 担当者① 担当者② 売上① 売上②
ああ 横浜 鈴木 佐藤 10 15
いいい 千葉 飯田 佐藤 20 10
sheet2
A 列 B C D
商品名 店舗 担当者 売上
ああ 横浜 鈴木 10
ああ 横浜 佐藤 15
いいい 千葉 飯田 20
いいい 千葉 佐藤 10
上記の図のように商品名、店舗はそのままに
担当者が変わったら行を変えて転記したいです。
担当者① 売上① 担当者② 売上②のような形であれば出来たのですが
並べたい順が飛んでいる場合、どのようにマクロを組めばよろしいでしょうか。
アドバイスよろしくお願いします。
No.2
- 回答日時:
こんにちは
>並べたい順が飛んでいる場合、どのようにマクロを組めばよろしいでしょうか
セル位置が変わるだけなので、ほぼ同じ要領です。
現状はどのように実現しているのかが不明なので、何が近いのかわかりませんが、現状が2セル分をまとめて転記していると仮定するならば、
・1セルずつ転記する(処理を分ける)
・まとめて転記する
例)Range("A1,D1").Copy Destination:=Range("J1:K1")
などの様にすれば宜しいのではないでしょうか?
※ 後者の方法は、あまりお勧めできるものではありません。
No.3
- 回答日時:
「絶対にループなどを使ったVBAじゃないとダメ」、ということでしたら使えない方法かもしれませんけど、もしそこまでじゃないんでしたら・・・
今後も横に増える可能性(変動する可能性)があるのなら、また最初の表がこのデータの持ち方なら、担当者ひとりあたりの列数も同じようですし、とりあえずマクロの記録でもいいんじゃないでしょうか?(最初の表がどこかから回ってくる・・というのでしたら・・・。)
3人め、4人め、と増えても、マクロの記録で作り直せばいいと思います。
添付の図のような感じなのですが、次のようにして「マクロの記録」機能で作りました。
(01)Sheet1をCtrlキーを押しながら右へドラッグして複製(コピーを作成)
(02)F1の列を選択
(03)空白の列を追加
(04)もう一個空白の列を追加
(05)A1~B3(製品名と地域の列)のセルをドラッグで選択して、Ctrl+Cなどでコピー操作
(06)F1をクリック
(07)貼り付け(Ctrl+V)
(08)F2~J3(2人めの担当者の部分)をドラッグで選択して切り取り(Ctrl+X)
(09)A4セルをクリック
(10)貼り付け(Ctrl+V)
(11)製品名を降順、地域を昇順で並べ替え
(12)F列より右の、列名だけが残った部分の列を削除
※既存のSheet2を消して、新しくできた表Sheet2にリネームする処理はマクロに含めませんでした。
=======================
Sub Macro9()
'
' Macro9 Macro
'
'
Sheets("Sheet1").Copy Before:=Sheets(2)
Columns("F:F").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1:B3").Select
Selection.Copy
Range("F1").Select
ActiveSheet.Paste
Range("F2:J3").Select
Application.CutCopyMode = False
Selection.Cut
Range("A4").Select
ActiveSheet.Paste
Range("A2").Select
ActiveWorkbook.Worksheets("Sheet1 (2)").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1 (2)").Sort.SortFields.Add Key:=Range( _
"A2:A5"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Sheet1 (2)").Sort.SortFields.Add Key:=Range( _
"B2:B5"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1 (2)").Sort
.SetRange Range("A1:J5")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Columns("F:K").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
End Sub
アドバイスありがとうございました。
はじめはその様に切り取り&貼り付けを行っていたのですがデータ数が多いせいかフリーズすることが多くて...。やはりこのやり方が一番地道ですかね。
No.4
- 回答日時:
No.1です。
今後増えるとして、
1・1行に対して必要なデータは必ず2人分である事は変わらない。
2・1行に対して今後は2人とは限らず人数の変動もある。
3・2に追加して行によっては2人のデータであったり4人のデータになる可能性もある。
など色々と考えてしまうのですが、その辺ではっきり決まった事(仕様変更がこの方法しかないなど)はあるのでしょうか?
あ。人数ではなく【店名】数って事になるのかな。
項目名が不思議ではありますが、【県名(又は【商品名】)】毎に【店名】数が一律なのかどうか。
No.5ベストアンサー
- 回答日時:
こんばんは!
横からお邪魔します。
両シートとも1行目が項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。
Sub Sample1()
Dim i As Long, j As Long
Dim lastRow As Long, cnt As Long
Dim wS As Worksheet
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "K")).ClearContents
End If
cnt = 1
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
For j = 3 To wS.Cells(i, Columns.Count).End(xlToLeft).Column Step 9
cnt = cnt + 1
With .Cells(cnt, "A")
.Resize(, 2).Value = wS.Cells(i, "A").Resize(, 2).Value
.Offset(, 2).Resize(, 9).Value = wS.Cells(i, j).Resize(, 9).Value
End With
Next j
Next i
.Activate
End With
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
アドバイスありがとうございました。
試してみたのですが順番が以下のようになりました。
A列 B C D E F G H I J K
A列 B L M N O P Q R S T
添付のようにすることは可能でしょうか?
これを以下のようにすることは可能でしょうか?
No.6
- 回答日時:
No.4です。
質問文と画像との書き出し条件が不一致なのは取り合えず避けて、画像にある【店名】から次の【店名】の1つ前までの列数はこれが完全なものなのでしょうか?
或いはそれさえも今後変動する可能性はあるのですか?
そして変動する場合でも <【店名】から次の【店名】の1つ前> と言う条件は変わらないと考えて良いのでしょうか?
何となく内容的にダミーな項目名である感じはしますけど、その場合でも同じ考えで良いのでしょうか?
No.7
- 回答日時:
No3です。
>はじめはその様に切り取り&貼り付けを行っていたのですが
>データ数が多いせいかフリーズすることが多くて...。
もしそうでしたら、
(マクロの記録で)自動生成されたVBAプログラムの先頭の行のそのまた上に、
Application.ScreenUpdating = False
という1行をコピペして動かしてみてください。
画面の描画がなされなくなりますので、もしかしたら、フリーズしなくなるかもしれません・・・。
それでもフリーズするようなら、何か裏でExcel以外の別のプログラム(重たい動きをするプログラムとか)が動いているせいかもしれないので、タスクマネージャで変なものが動いていないか確認してください。
もちろん、他の方のご回答のほうを優先してください。
(私がマクロの記録でのVBAプログラムの自動作成をご紹介したのは、もしかしてお時間的な余裕がないかもしれないと思ったからと構造がシンプルっぽかった、ただそれだけですので・・・。)
No.8
- 回答日時:
No.6です。
No.5さんの結果と画像を見比べても同じようにしか見えないのですが、具体的にどこが違うのでしょう?(老眼のせいかな?)
それとも画像が9列で実際は15列って点でずれてしまっているだけかな?
切り貼りはやり方によってはメモリを消費します(幾ら物理的メモリを増やしていてもExcelがそれらをフルに使える訳ではなかったかと)し、
http://officetanaka.net/excel/vba/cell/cell09.htm
とかもありますので。
取り敢ずNo.5さんの結果が具体的にどう違うのかが明確にならないと無意味になりそうですしね。
実は順番が入れ替わる箇所があるとかでしょうか?
それともセルの書式設定で表示を変えている物が元に戻って並んでしまう?
画像はダミーでしょうから『見えている物が正しい』とは言えない可能性も考えてみました。
大変申し訳ございません。
添付資料が間違っておりました。。。
皆さんに土下座したいくらい申し訳ないです。
この質問は示させていただき改めて質問いたします。
ご指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Access(アクセス) アクセス フォームの自動入力 1 2023/03/20 00:18
- メルカリ 詐欺?窃盗?業務上横領、抽選会の景品を着服した内部スタッフへの処罰、対応 1 2023/05/09 21:21
- 営業・販売・サービス この文章から何かスキルは出せないでしょうか? スーパーマーケット、大手家電量販店、ホームセンター、ド 4 2022/04/19 14:41
- Visual Basic(VBA) VBAで重複データを確認したい 5 2022/10/07 16:24
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Excel(エクセル) Excelについて 4 2023/03/02 09:24
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで特定の文字列が入っ...
-
エクセル 上下で列幅を変えるには
-
エクセルのマクロで意図しない...
-
アクティブになっている行をマ...
-
excelのデータで色つき行の抽出...
-
Excel 時刻の並び替え
-
Excel グラフのプロットからデ...
-
セルの色によって条件文をつけ...
-
VBAで色の付いているセルの行削除
-
Excelでカタカナ・ひらがな・英...
-
エクセル マクロ オートフィ...
-
Excel VBA アクティブセルから...
-
Excel2007で、指定範囲の行高さ...
-
[EXCEL]ボタン押す→時刻が表に...
-
サイズの違うセル 並べ変え
-
エクセルマクロ オートSUM(合...
-
特定の文字がある行以外を削除...
-
AのセルとB行を比較して、一致...
-
電話番号の入力方式が違うデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報
現状は二つずつなのですが今後増える可能性があります
説明文は簡略しておりました。
混乱させて申し訳ないです。
捕捉として今後店名も人数も増える可能性はあるのですが、いまあるのをなんとかしたいです(過去のデータが全然整理されていないので...)
【店名】から次の【店名】の1つ前までの列数はこれが完全なものなのでしょうか?
→画像に載せ切れなかったのですが実は15列あります。
変動については今はないです。
色々変わってすみませんがよろしくお願いします。
>これを以下のようにすることは可能でしょうか?
お礼に記載した↑は間違いです。すみません。
添付のような形が希望です。