• 締切済み

VBAでExcelの表の修正

添付画像の様な表Aを表Bに修正しています。 これまで手作業(コピペで数日かかる)で行っていましたが、 VBAで自動的に処理できたらと考えてます。 Noは一意となり、件数はおよそ5000件程度。 上から処理したとして、Name列に名前が無くなったら終了。 この表Aを表Bの様に修正(新規作成でも可)するVBAの処理を教えてください。 私はVBAの勉強を始めたばかりなので解説もつけて頂けると助かります。 分かりにくい説明ですみません。 よろしくお願いします、どうかお知恵をお貸しください。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 「表A」はSheet1にあり、画像通り3行目はタイトル行でデータは4行目以降にある。 「表B」はSheet2として3行目のタイトルはすでに入力済みだとします。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long Dim ws As Worksheet Set ws = Worksheets("Sheet2") Application.ScreenUpdating = False j = ws.Cells(Rows.Count, 1).End(xlUp).Row If j > 3 Then ws.Rows(4 & ":" & j).ClearContents End If For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row For j = 3 To Cells(i, Columns.Count).End(xlToLeft).Column If Cells(i, j) <> "" Then With ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Cells(i, 1) .Offset(, 1) = Cells(i, j) .Offset(, 2) = Cells(i, 2) .Offset(, 3) = Cells(3, j) End With End If Next j Next i Application.ScreenUpdating = True End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

シート1に表Aを作る シート2に表Bを作る 表A、Bはどちらも実際には1行目に項目行を置き、2行目から実データを記入する sub macro1()  dim i as long ’シート2を準備する  worksheets("Sheet2").cells.clearcontents  worksheets("Sheet2").range("A1:D1") = array("name","no","alma mater","item") ’シート1のA列を1行ずつ巡回する  for i = 2 to worksheets("Sheet1").range("A65536").end(xlup).row ’シート2のA,C,D列を作成する(単純に転記する)  worksheets("Sheet2").range("A65536").end(xlup).offset(1).resize(5, 1).value = worksheets("Sheet1").cells(i, "A").value  worksheets("Sheet2").range("C65536").end(xlup).offset(1).resize(5, 1).value = worksheets("Sheet1").cells(i, "B").value  worksheets("Sheet2").range("D65536").end(xlup).offset(1).resize(5, 1).value = application.transpose(worksheets("Sheet1").range("C1:G1")) ’シート2のB列を作成する(形式を選んで貼り付けで行列を入れ替える)  worksheets("Sheet1").cells(i, "C").resize(1, 5).copy  worksheets("Sheet2").range("B65536").end(xlup).offset(1).pastespecial transpose:=true  next i end sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAでご教示ください

    シート1のB5にNo、C5に住所、D5に電話・・・・・CXまで入力したものをコピーして シート2のB列の同じNoの行に貼り付けるVBAをご教示ください。 おこないたいことは、シート2に1500ほどある台帳で、修正をのある行データをシート1に No入力で呼び出し、修正して、修正したデータを元台帳に戻すということを行いたいのです。 No入力で呼び出すVBAは何とか出来ていますが、シート2の同じNoの行に貼り付けるVBAが わかりません。 どなたか、よろしくお願いいたします。

  • Excel VBA 表の分割ってできます?

    Excel VBA 表の分割ってできます? Excelのバージョンは2007と19997です。 添付画像みたいに特定のデータを他のシートに別々に分割して出力することってできます? ※一個一個セルの値見てコピペするやり方は除いて!!! 簡単にExcelの機能か何かでできませんかね><なんか処理が重くならない良い方法をご教授願います。

  • エクセルで表の相違確認をVBAでしたい。

    お世話になっております。 下記の様な表がシート1とシート2に有、 シート2がシート1と比較して、行が多かったり、または 数量だけが変わっていたり、行が減っていたり、 表の行数は100から200行くらいあるので、VBAでどこが 違うかをすぐ分かる様に確認したいと思っています。 下記の表はあくまでも例ですが、実際は同じNO・同じ品番・同じ品名・同じ数量で複数行あったりします。 どの様に記述していいか分からなく、ご教示下さいます様宜しくお願い致します。    記 A列  B列  C列   D列   E列    No  品番  品名   地区   数量  236  A6TET  みかん  市川   3本 248  A7TGR  りんご  松戸   5本 273  B9GKT  ぶどう  柏    14本 273  A8UFE  すいか  行徳   6本    381  C2ROF  いちご  平井   22本

  • エクセルの表でまた質問させてもらいます。

    エクセルの表でまた質問させてもらいます。 添付の表で、C列にFという記号が入っていると思いますが‥。そのFの中から、B列の数字6以上の件数と、合計数は、どのように、出せばいいですか?それから、C列のFの中で、B列にある1の数だけの件数および合計数は、どのように出したらいいのでしょうか?教えてください。 お願いします。

  • エクセルマクロ(VBA)の立て方について

    お世話になっております。 エクセルのVBAマクロについて教えてください。 以下のように2種類A,Bの縦に並んだ時系列データがあった場合、 A No1  2012/6/1    1 A No2  2012/7/1    3 A No3 2012/8/1    4 B No1  2012/6/15   2 B No2 2012/7/15   6 B No3  2012/8/15   7 B No4  2012/9/15   9 上記のデータを別のシートに以下のように表示させたいのです。 (上記1列目は以下1列目に対応、上記4列目の数字をA、B単位で累計和を以下2列目に表示) A 1 A 4 A 8 B 2 B 8 B 15 B 24 以上のVBAマクロの数式の立て方を教えていただけますでしょうか。 よろしくお願いいたします。

  • エクセルのVBAに関する質問です。

    エクセルのVBAに関する質問です。 仮にA列にA1からA14まで(12341231212345)と入っていて、さらにB列にB1からB14まで(38906493087639)と入っていたとします。A列の(2)の隣にあるB列の数字はそれぞれ(8407)になりますよね。 この2のとなりのB列の数字を、A列の最初から(1234)(123)(12)(12345)と1を区切りとして、C列に、2に対応していた先ほどの数字を入力したいのです。 つまりC列には(88884440077777)と入るようにしたいのですが、VBAド素人の私には解説書を読んでもいい知恵が浮かびません。 どなたか、ご説明か、できればVBAのコピーを取らせていただけないでしょうか? よろしくお願いいたします。

  • エクセルVBAによるマトリクス表の縦配列

    エクセルVBAで以下のような処理を行うプログラムを作成したいのですが、 シロウトなんで、なかなかスマートに作れません。 どのようにすればいいかご教示いただけたら有り難いです。 (1)下記のように、縦横のマトリクス表にデータが入力されている。   A B C ・・ 1 2 3 ・ ・ (2)これを別シートに縦に2列にデータを並べるように処理する。  左列には"列項目&行項目"、右列には該当するデータをセットする。 A1  A1のデータ A2  A2のデータ  A3  A3のデータ ・   ・ B1  B1のデータ ・   ・ ・   ・ (3)尚、列項目(A.B.C...)と行項目(1.2.3...)の項目数は不定で、セルが空白になるまで、 処理を繰り返すかたちにする。 以上のような条件ですが、よろしくお願い致します。

  • VBAでエクセルのいくつかの表を同じ配列に格納する

    VBA初心者です。 調べてみましたがどうにも情報に行きあたらなく、ご質問をさせていただきます。 添付のようなエクセル上の同一シート上にある3つの表をコピーし、VBAで同じ配列の各列として取り込みをしたいと考えております。 大分類、中分類、小分類のそれぞれの行は同じもののそれぞれの内容を記載しており、 できればこれらを同じ配列の1列目、2列目、3列目に格納をしたいと思っております。 これらの表が1つの表にまとまっていれば、 Dim 配列(1,10) as Variant 配列 =range("A1:C10") で事足りると思うのですが、別々のためこの方法がとれません。 セル指定で行うことも考えましたが、データが10万行を超える場合もあるため、できれば避けたいと思っています。 各表を指定し、配列の1列目、2列目、3列目に一括して代入をご存じでしたらら、どうぞ教えていただきたいと思います。 どうぞよろしくお願いします。

  • どうVBAを書けばいいのでしょうか

    以下のような表があります。 (sheet1) A列 不規則な数列(←一行目にタイトルが書き込まれています) 13   (←二行目から数字がランダムに書き込まれています)    18 44 36 22 14 27 21 32 35 44 12 (以下続く) Case1[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きい件数] Case2[i行の値よりi+1行の値が大きく、i+1行の値よりi+2行目の値が大きく、i+2行の値よりi+3行目の値が大きい件数] などの件数を、新たなシートに書き出したいのです。 上の例からすると、 (sheet2) A列  B列(←B列に件数を書き込む) Case1  3 Case2  1 のような感じです。 if文で作ってみたのですが、うまく処理してくれません。 どのようなVBAを書けばいいのでしょうか。 分かる方、よろしくお願いします。

  • エクセルvbaについての質問です

    操作は全てマクロ上で行うものとします 今、A列に-1,0,1が、B列に-0.5,0,0.5が、C列に0,1,2,3,4 がバラバラに入っているとします (A列とB列とC列に入っている行数は同じとします)。 そこで、C列の値が0のときの(1でも何でも可)、A列とB列に対する表が作りたいです。 ご指導お願いします(出来るだけセルには文字は入れない方法でお願いします)。 値はその対応する場所に1を足していくものとします。 例.C1=0、A1=-1、B1=-0.5とするとき \-0.5 0 0.5 -1 _1 0 0 0 _ 0 0 0 1 _ 0 0 0 「_」は表を見やすくするためのものでただずらすために使っています こんな感じで表に値の数を入れていきたいです

専門家に質問してみよう