マクロで並び順・行列を入れ替えて貼り付け

このQ&Aのポイント
  • マクロを使用して複数の棚式の表の並び順・行列を入れ替え、集計表を作成したいと思っています。
  • Sheet1が集計表であり、Sheet2~5がそれぞれの棚の表です。
  • 具体的な作業手順として、空のシートにSheet2の指定範囲を行列入れ替えで貼り付け、それを一つのリストにしてから集計表に貼り付ける方法を試しています。
回答を見る
  • ベストアンサー

マクロで、並び順・行列を入れ替えて貼り付け

複数の棚式の表から、一つのシートに並び順・行列を変えて貼り付けて 集計表を作りたいと思っています。 マクロは記録から意味を調べたり、範囲の応用をするくらいの初心者です。 Sheet1が集計表、Sheet2~5がそれぞれの現場での棚の表です。 <Sheet1> 集計表  |  A  B    C    D   E  F  G  H  I ----------------------------------------------------------- 1|  連番 店名 お勧め 品名 金額 棚番 棚行 棚列 備考  2|   1   亜   ●   ああ  50  1  2   2  aa 3|   2   亜       いい  80  1  2   3   4|   3   亜   ●   うう  30  2  3   1  bb 5|   4   亜       ええ  20  3  1   1 6|   5   亜       おお  90  4  2   2 <Sheet2> 棚1  |  A  B   C   D   E  -------------------------------------------- 1| 店名  亜  2| 品名     ああ    他 3| お勧め    ●          4| 金額     50         5| 備考     aa  6| 品名   いい  7| お勧め                  8| 金額           80    他 9| 備考                        10| :               <Sheet3> 棚2 <Sheet4> 棚3 <Sheht5> 棚4 以前、逆の方法(集計表→棚)の質問させて頂きました。http://oshiete1.goo.ne.jp/qa3489046.html 他の質問も調べたりして、なんとか応用できないものかと思ったのですが、 恥ずかしながら私のスキルでは対応できません。 今回は棚の表に棚番号、行、列の情報がありません。 現在途中まで組んでみたのは ○空のシートにSheet2!B2:E9をそのまま行列入れ替えで貼り付けて 一つのリストにしてから、改めて集計表に貼り付ける。 ○棚番号、行、列はそれぞれ入力、貼り付けする。 と原始的なものです^^; 2つの質問で恐縮ですが、以下のマクロについて ご指導頂けましたら幸いです。 1.Sheetから棚番号、各シートのセル位置から行列の番号の割り振り。 2.Sheet2~5の表をSheet1の形式に貼り付け。   「他」の部分は後でソートか置き換えで削除するので、 貼り付けの時は残っていても大丈夫です。 ちなみにお勧めや金額は空白の場合もあり、確実に入っているのは品名です。 自分の拙いマクロではSheet1で貼り付ける時に、D列(品名)を参照して、 xlUp、Offsetで左右に移動して貼り付けていました。 分かり辛い説明ですみません。 何かあれば補足させて頂きます。 よろしくお願いいたしますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >シート1のA1が空白または「連番」と項目が入っていて、A2以降にデータがない場合 まさか、データがないということは、まったく、予想していなかったです。    If Val(.Cells(i,1).Value )>0 Then ~    End If として、A列のデータをチェックする程度しか、今は思いつきません。  With Sh0   For i = 2 To .Range("A65536").End(xlUp).Row    If Val(.Cells(i,1).Value )>0 Then    ArLists = Array(.Cells(i, 2).Value, .Cells(i, 3).Value, _            .Cells(i, 4).Value, .Cells(i, 5).Value, _            .Cells(i, 9).Value)    If IsNumeric(.Cells(i, 6).Value) And _      IsNumeric(.Cells(i, 7).Value) And _      IsNumeric(.Cells(i, 8).Value) Then      ListUp2Sheet Shes(.Cells(i, 6).Value), _                 .Cells(i, 7).Value, _                 .Cells(i, 8).Value, _                 ArLists    End If   End If   Next i   End With

yokko46105
質問者

お礼

お礼が遅くなり、大変申し訳ございません。 残念ながら、やはり上手くいきません。。。 現在頂いているマクロもしっかり応用できるように勉強しないと 今後対応ができないので、今のスキルでは取り入れる事が難しそうです。 折角ご丁寧に対応してくださったのに申し訳ございませんでした。 どうもありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 もし、ブレークポイントを置くのでしたら、 ●   ListUp2Sheet Shes(.Cells(i, 6).Value), _                 .Cells(i, 7).Value, _                 .Cells(i, 8).Value, _                 ArLists の部分で、ローカルウィンドウをごらんになってみてください。正しく、値が渡されているかです。 もしかしたら、もともと、この部分かもしれませんね。 中抜けというよりも、元の範囲が食い違っている可能性が強いです。 With Sh0  '←シート1 ですね。 For i = 2 To .Range("A65536").End(xlUp).Row    ArLists = Array(.Cells(i, 2).Value, .Cells(i, 3).Value, _            .Cells(i, 4).Value, .Cells(i, 5).Value, _            .Cells(i, 9).Value) 今まで、やってきたのですから大きな食い違いというより、おそらくは、コードの最初の設定部分などに問題があることが大きいです。

yokko46105
質問者

お礼

ご回答ありがとうございます。 シート1のA1が空白または「連番」と項目が入っていて、 A2以降にデータがない場合はエラーにならないのですが、 A1に項目、A2~A4に連番を振って稼動した所、 ListUp2Sheet Shes(.Cells(i, 6).Value), _ .Cells(i, 7).Value, _ .Cells(i, 8).Value, _ ArLists の部分で「インデックスに有効範囲がありません。」と エラーが出ます。 この部分で問題があるのでしょうか? 度々本当に申し訳ございません。。。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >棚1の1段目B2:E5、棚1の2段目B6:E9 ・・ と続きます。 とありましたが、 「1列5行」=ユニット と 表の一覧の方では、2段目 B7:B11, 3段目 B12:B16 となっていましたので、表のほうを優先させました。 つまり、もし、それが違うと、以下の部分を変えなくてはなりません。  With .Cells((Gyo - 1) * 5 + 2, Retu + 1) '★ここが大事 なお、店名は、一度、入れてしまうと、後は、チェックはされません。 また、渡すデータが増えた場合は、ArLists に含めていくような形にします。また、その変数を、パラメータ配列にすれば、何個でも、自由に付け加えるようになります。 '-------------------------------------------------- '標準モジュール Sub TestMacro2()   Dim Sh0 As Worksheet   Dim Sh1 As Worksheet   Dim Sh2 As Worksheet   Dim Sh3 As Worksheet   Dim Sh4 As Worksheet   Dim i As Integer   Dim Shes As New Collection   Dim ArLists As Variant      Dim LastRow As Long   Set Sh0 = Worksheets("Sheet1") '原本   Set Sh1 = Worksheets("Sheet2") '1   Set Sh2 = Worksheets("Sheet3") '2   Set Sh3 = Worksheets("Sheet4") '3   Set Sh4 = Worksheets("Sheet5") '4      Shes.Add Sh1   Shes.Add Sh2   Shes.Add Sh3   Shes.Add Sh4    '1.連番, 2.店名, 3.お勧め, 4.品名, 5.金額, 6.棚番, 7.棚行, 8.棚列, 9.備考   With Sh0   For i = 2 To .Range("A65536").End(xlUp).Row    ArLists = Array(.Cells(i, 2).Value, .Cells(i, 3).Value, _            .Cells(i, 4).Value, .Cells(i, 5).Value, _            .Cells(i, 9).Value)    If IsNumeric(.Cells(i, 6).Value) And _      IsNumeric(.Cells(i, 7).Value) And _      IsNumeric(.Cells(i, 8).Value) Then      ListUp2Sheet Shes(.Cells(i, 6).Value), _                 .Cells(i, 7).Value, _                 .Cells(i, 8).Value, _                 ArLists    End If   Next i   End With   Set Sh0 = Nothing: Set Sh1 = Nothing   Set Sh2 = Nothing: Set Sh3 = Nothing   Set Sh4 = Nothing End Sub Private Sub ListUp2Sheet(sh As Worksheet, ByVal Gyo As Integer, ByVal Retu As Integer, ar As Variant) '1.品名,2.お勧め,3.金額,4.備考"  With sh   If .Cells(1, 2).Value = "" Then .Cells(1, 2).Value = ar(0)   With .Cells((Gyo - 1) * 5 + 2, Retu + 1) '★ここが大事    .Offset(0, 0).Value = ar(2) '品名    .Offset(1, 0).Value = ar(1) 'お勧め    .Offset(2, 0).Value = ar(3) '金額    .Offset(3, 0).Value = ar(4) '備考   End With  End With End Sub

yokko46105
質問者

お礼

お礼が遅くなり、申し訳ございません。 マクロを稼動してみたところ、エラーは発生しないのですが、 商品リストのシートにデータが引っ張られません。 「Private Sub ListUp2sheet・・・」にブレークポイントを 置いたのですが、中段されずにマクロが終わっているので 「Private Sub ListUp2sheet・・・」以降を参照していないようです。 色々と試して見たのですが上手くいかず、 私のスキルでは対応できないようです。。。 折角お時間を割いて作って頂いたのに、申し訳ございません。 ありがとうございました。

yokko46105
質問者

補足

素晴らしいマクロをありがとうございます!!! 実際の範囲が違うので、応用してまたご報告させて頂きます。 少しお時間を頂くかもしれませんが。。。^^; 取り急ぎ御礼までm(_ _)m

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 前回の作者です。 集計表 1|  連番 店名 お勧め 品名   金額 棚番 棚行 棚列 備考  2|   1   亜  ●  ああ   50  1    2   2  aa 3|   2   亜     いい   80  1    2   3   これが、 <Sheet2> 棚1  |  A  B   C   D   E  -------------------------------------------- マクロ自体は、そんなに難しくないように思いますが、それぞれの数字の意味がどういう対応しているのか、読めないです。 「棚割表の1つのシートに1枠 =5行×10列(仮)」 まず、この意味が分からないです。 1列目は、項目行であり、B1 に、店名が入れるのですから、 それぞれ、1行、1列ずれるわけで、左端上を、「B2」を記入の起点とするかと思います。 『棚行 2  棚列 2』 は、 「C2:C5」(画面ではそう見えます) これが分からないです。『棚行 2  棚列 2』 と、それを結びつけるためには、どうしたらよいのか分かりません。      『棚行 2  棚列 3』    これは、もっと分かりません。バラバラに入れているように見えます。 品名「いい」が、B6 ? 品名の「いい」の金額が、D8 のように見えます。 言い換えると、私は、このようにすれば、意味は分かるとは思いますが、どうも意味が違うようですね。 棚番=Sheet名(または順番) 「1列4行」=ユニット ==================================================== 棚行:1,棚列:1    棚行:1,棚列:2  棚行:1,棚列:3 ---------------------------------------------------  B2:B5        C2:C5      D2:D5 ==================================================== 棚行:2,棚列:1   棚行:2,棚列:2   棚行:2,棚列:3 ------------------------------------------------  B6:B9        C6:C9       D6:D9 ==================================================== 棚行:3,棚列:1    棚行:3,棚列:1  棚行:3,棚列:1 ---------------------------------------------------  B10:B14       C10:C14     D10:D14 --------------------------------------------------- アドレスで説明すればはっきりするのですが、絵的に、ずれているのか、位置関係が読めません。いずれにしても、マクロで解決するなら、数学的に位置関係を決定をしなければなりません。 >「他」の部分は後でソートか置き換えで削除するので、 >貼り付けの時は残っていても大丈夫です。 それに「他」とは、中途半端な位置にきているようですが、一体どこから来るものなのでしょうか?

yokko46105
質問者

補足

ご回答ありがとうございます。 前回も大変お世話になりました。 >「棚割表の1つのシートに1枠 =5行×10列(仮)」 >まず、この意味が分からないです。 ロジック(しかもバラバラな・・・)と#1の補足で お伝えしているのが違うので、余計に混乱させてしまったかもしれません。 申し訳ありません。 まずSheet2~5の1行目は、店名、日付、時間等が入るタイトル的な行に なります。2行目以降に店名等は出てきません。 項目行はなく、ロジックで言うとB2:E5が1段の棚になるので、 それを枠と表現させて頂きました。 棚1の1段目B2:E5、棚1の2段目B6:E9 ・・ と続きます。 実際の1段の項目数、列数は異なりますので、#1の補足では キリがよい所で棚の1段(1枠)=5行×10列 とさせて頂きました。 #この先、棚の1段=5行×10列として、補足させて頂きます。 Wendy02さんがアドレスで表してくださったのが正にその通りです。 棚番=Sheet順番-1(Sheet5には棚4なので4) 「1列5行」=ユニット A1 店名  C1 日付  E1 時間 ==================================================== 棚行:1,棚列:1    棚行:1,棚列:2  棚行:1,棚列:3 ---------------------------------------------------  B2:B6        C2:C6      D2:D6 ==================================================== 棚行:2,棚列:1   棚行:2,棚列:2   棚行:2,棚列:3 ------------------------------------------------  B7:B11        C7:C11     D7:D11 ==================================================== 棚行:3,棚列:1    棚行:3,棚列:2  棚行:3,棚列:3 ---------------------------------------------------  B12:B16       C12:C16     D12:D16 --------------------------------------------------- 「他」は棚割表で入っている場合があり(全てではありません)、 商品名の行には「商品名」、「他」、「空白」が混在しています。 実際のデータでは空白も含め400点(400ユニット)なので、 現在は棚番号、棚行、棚列は指定して割り付ける形にしています。 範囲が変わる事も考えられるので、その点を Sheetの順番、セルの位置から値を取れないかと思った次第です。 以上の補足でお分かり頂けましたでしょうか? 説明が上手くできず申し訳ありません。 よろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

確認と補足を願います。下記A,B,Cの点。 Sheet1の名前「集計表」は集計して内容なので「集約表」が適当かとおもう。 ーーー ○は対応項目あり、従って代入、Xは対応項目なし、右記の処理をする、という意味。 Sheet1ーーーーSheet2-Sheet5・・ 連番ーーーーーーーーX  <ーー自動 店番ーーーーーーーー○ お勧めーーーーーーー○ 品名ーーーーーーーー○ 金額ーーーーーーーー○ 備考ーーーーーーーー○ 棚番ーーーーーーーーX  <ーー自動 棚行ーーーーーーーーX  <==空白を入れる(A) 棚列ーーーーーーーーX  <==空白を入れる(B) ーー (A)(B)は空白でよいか ==== 例えばSheet2で 品名の出現する行を察知するのは、文字列では何も無いですね 5行おきに規則正しく品名が出てきて、終わり行まで、狂うことは無いですね?(C) === 以上A,B,Cについて補足お願いします。

yokko46105
質問者

補足

ご回答ありがとうございました。 補足させて頂きます。 まず、おっしゃる通り集計表は不適当ですね^_^; 棚割表の1つのシートに1枠5行×10列(仮)として、10枠(仮)あります。 途中、余分な行見出し等は入っていませんので、 (C)のお答えとしては、狂うことはありません。 そのシートが4つあるので、品名は400まで取れますが、 実際にデータが入っているのは最大100です。 (A)(B)棚行、棚列は必要です。 セル位置から情報が取れないのであれば、 棚割表からブランクを含めて5行×10列を貼り付けた後に、 任意で値を組み込まないといけないかと思っています。 (現在のマクロでは、Sheet1のフォーマットに 棚番、棚行、棚列を割り振り、その脇に貼り付けています) ちなみにお勧めをキーにソートをかけて、 連番は、お勧め以外の品で1~、お勧めで101~となります。 補足としては以上でよろしいでしょうか? 何かございましたら、また補足させて頂きますので、 どうぞ宜しくお願いいたしますm(_ _)m

関連するQ&A

  • リンク貼り付けをマクロで簡素化したい

    1)個人票ブック(太郎シート 花子シート 次郎シー・・・・・)の各シートのA1からA5まで、値や公式がはいっています。 2)このシートのA1からA5までの値等を、別の総括表ブック(一枚のシートしかない)にリンク貼り付けをします。 3)まず、太郎シートのA1~A5までは、総括表ブックのB列にリンク貼り付けするマクロボタンを、太郎シートに設置します。 4)さらに、花子シートのA1~A5までは、総括表ブックのC列にリンク貼り付けするマクロボタンを、花子シートに設置します。 5)そして、次郎シートのA1~A5までは、総括表ブックのD列にリンク貼り付けするマクロボタンを、次郎シートに設置します。 6)こうしてマクロボタンを順次貼り付けていきます。 7)各シートの貼り付け場所は列に貼り付けていきますが、上から順番ではなく、任意に飛んでいますが、  各シートの行は、みな一律で同じ行です。 列は違っても皆おなじ行にリンク貼り付けしたいです。 このような操作をマクロ記録でつくりましたが、膨大な作業が必要です。これをなんとかVBAで簡素化したいのですが・・よろしくお願いします。

  • エクセルマクロで出来るでしょうか。

    マウスでクリックしたセル位置の入力内容を、別のセル位置に表示するようなマクロは出来るでしょうか?。 考えているのは、弁当注文の集計表の作成です。 A列に氏名、B列に店名、C列に品名、D列に金額と、予め入力してある表で、 当日注文する分を、個人毎に、氏名・店名・品名・金額・とクリックすれば、 同じシート内に作成した集計表に、クリックした順番に表示していくというようなものです。 予めの入力は、各列5行目から行っています。 また集計表は、F列、G列、H列、I列の5行目から下に、クリックした順番に表示できればと思っています。

  • Excel 2007 マクロ 表の貼り付け

    Excel 2007 マクロ 表の貼り付け Excel 2007 マクロ 表の貼り付けについて教えてください。 <Sheet1>の表にあるA2からD4を <Sheet2>に値貼り付けをします。 表は画像を添付します。 マクロの記録では下記内容になります。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A2:D4").Select Selection.Copy Sheets("Sheet2").Select Range("A2:D4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub <Sheet1>のA列の行の増減にかかわらず、<Sheet2>に貼り付けることができるように するにはどのようにマクロを修正すればよろしいでしょうか。

  • アクティブにせず行列を入れ替えて貼付け

    マクロを勉強中のものです Sheet1のE1:E5をコピーし Sheet2のC列の入力済最終セルの一つ下に行列を入れ替えて貼付けたいです (しかしSheet2はアクティブにせず処理させたです) どうか、これが可能なマクロを教えてください。

  • Excel マクロ 条件抽出貼り付け等

    いろいろ拝見させていただいているのですが うまく設定できず、困っています。 使用者が数名いる(そしてその数名がそれぞれで集計を取りたい)ので シートのタブ名、シート数、基準となる年月が固定されないことが前提です。 集計のシートがあります(このシートもたとえば2月・3月・4月…と数ヶ月分で複数シートになる可能性があります) ・A1セルには、起点となる年月が入力 ・A3~A6セルには、目標・予定・実績・備考が入ります。 各支店のシートがあります(支店数は、使用者によって様々です。最大で25くらいになるかと思いますが、書式は同じです) ・A1セルには、支店名(タブを変更したら、A1セルが連動するように数式を組んでいます) ・A2セル、A8セル、以降6行毎に、年月日(1シートで12ヶ月分予定) ・A3~A6セルには、目標・予定・実績・備考が入ります。 ・表の一塊は、A2:AB6です。 各支店のシートから集計シートに転記をしたい。 A支店~たとえばG支店までの7支店があり、 (1)集計シートA1セルにある年月を基準に、各支店シートの該当月の表の検索をかけ (2)集計シートのA2以降6行毎(各支店シートでは年月を入れているセル)のセルに支店名を張り付け (3)各支店シートA3:AB6の内容を、集計シートのA3:AB6に値と数値の書式貼り付けをしたい  (表一塊毎) (4)集計シートのA支店・B支店の貼り付けの間には、1行挿入をしておきたい 同じような質問が…というお返事があることを承知でお伺いしています。 いただいた回答を基に、勉強をしていきたいと思っていますので なにとぞよろしくお願い申し上げます。

  • 36回のソート&コピ&ぺを、1度のマクロ実行で行うには?

    初心者です。WinXP、Excel 2002を使用してます。 四苦八苦しております ブックのシート数は変動しますが、例えば、 1、37シート目(集計1)に、1行目とA列が項目で、37行(37行以下)かつ100列(100列以下)のデータ表(小数点以下の桁数1以下、空白もあり)があります。それをまず「行列を入れ替え」(私が、縦方向の方がソートしやすいと思ったため)ます。 2、次に、その1行目とA列が項目の、100行(100行以下)かつ37列(37列以下)のデータ表の、データ部分を縦方向に「昇順で並べ替え」(小数点以下の桁数1以下、空白もあり)ます。 3、うち縦方向のトップ7までだけのデータを、再度、「行列を入れ替え」て、次シートの38シート目(集計2)へ貼り付けます。元の37行(8列)のデータ表に戻ります。 ちなみに、最初(元)はソートするデータが列方向のため、縦方向でソートしたほうが良いと思いまして、2回の「行列を入れ替え」を入れました。 また、「行列を入れ替え」が2回もあるので、39シート目(集計3)のシートも追加しても構いません。 以上 36回のソート&コピー&ペースト を1回のマクロ実行で行うことができればと思っております。    どうかよろしくお願い致します。

  • エクセルで下記のマクロ集計の方法がありましたら、教えてください。

    エクセルで下記のマクロ集計の方法がありましたら、教えてください。 よろしくお願いいたします。 シート1 集計表(毎月作成) (科目)     (金額) 交通費      120,000 (シート2の出張費+近距離交通費) 雑費        48,000 (シート2の寄付金+表彰金+その他雑費) ・ ・ ※シート1について  集計行、集計列とも不変です シート2 データ(毎月変動) (科目)     (金額) 出張費      100,000 近距離交通費   20,000 寄付金      8,000 表彰金      30,000 その他雑費    10,000 ・ ・ ※シート2について  表示行は変動しますが(科目がないときは、科目も金額も表示されません)、表示列は不変です

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

  • エクセルのコピー貼り付けマクロ

    EXCEL2003を使用しております。 用品の使用記録簿を作っております。 Sheet”入力”で日付や社員名や品目を入力し、(登録)のマクロボタンを押せばSheet”集計”(約100行)に1行目から順次貼りつく表を考えているのですが、うまくできません。 ご存知の方は、教えてくださいお願いいたします。

  • エクセルでのマクロを教えて

    下記のようなものをみたすマクロは組めますか? ファイルにシートが何種類かあります。 sheet1には各店の集計データーがあります。 その中にA列には集計の項目名がAZ列まであり 1行目には店舗名が10種類あります。 sheet2からはsheet名をsheet1に記入されている1行目にしている店舗名にしてあります。 またA列には集計の項目名がありますが sheet1にある項目と全く同じではなく 項目は少なくなっています。 また、sheet2からの店舗名にはsheet1の集計表にはない 店舗名もあります。 このsheet1のデーターをもとに sheet2の1行目の項目と一致する項目の値や数字を sheet1からコピーするというものです。 よろしくお願いします。

専門家に質問してみよう