Excel2013マクロ初心者のための便利なTips!

このQ&Aのポイント
  • Excel2013のマクロを使いこなすための基本的なTipsを紹介します。初心者でも簡単にマクロを作成する方法や、よく使う機能の使い方などを解説します。
  • Excel2013のマクロを使ってシート間のデータの転記や整理を行いたい場合、以下の手順を実行することで目的の結果を得ることができます。
  • まず、Sheet2をコピーしてRESULTシートを作成します。次に、Sheet1とSheet2のNo.を比較し、共通の番号の行のみを残します。最後に、Sheet1の科目の列を追加します。これらの手順を順番に実行することで、目的の結果を得ることができます。
回答を見る
  • ベストアンサー

Excel2013 マクロ(初心者)2

こんにちは 下記マクロ sub macro1()  dim LastRow as long  lastrow = worksheets("Sheet2").range("A65536").end(xlup).row ’結果シートを準備  worksheets("Sheet2").copy after:=worksheets("Sheet2")  activesheet.name = "RESULT" ’ファイル1から転記、不要な行を抹消  range("C1:C" & lastrow).formula = "=VLOOKUP(A1,Sheet1!A:B,2,FALSE)"  on error resume next  range("C1:C" & lastrow).specialcells(xlcelltypeformulas, xlerrors).entirerow.delete  range("C1:C" & lastrow).value = range("C1:C" & lastrow).value end sub を、一部変更して 1、Sheet2をコピーして、resultを作り←上記マクロで既に出来上がり 2、Sheet1とのNo.を比較して、共通な番号を残し、(この場合、a1とa2)  後の行は削除して 3、Sheet1の科目の列を追加する。 方法を教えて下さい。 sheet1 No. 科目 難易度 f2 物理 9 f2 数学 10 a1 化学 2 a2 生物 2 Sheet2 番号 No. 人気度 参考図書 時間 1 c4 B 4冊 20時間 2 c5 B 4冊 35時間 3 a1 C 8冊 100時間 4 a2 A 6冊 150時間 result 番号 No. 科目 人気度 参考図書 時間 1 a1 化学 C 8冊 100時間 2 a2 生物 A 6冊 150時間

noname#196865
noname#196865

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

わざわざ番号と説明してるのは、シート2はA列が番号列で1,2,3を持っていて、B列からNo列にしてるって事でいいんですね?そういう事にします。 sub macro2()  dim LastRow as long  lastrow = worksheets("Sheet2").range("A65536").end(xlup).row ’結果シートを準備  worksheets("Sheet2").copy after:=worksheets("Sheet2")  activesheet.name = "RESULT" ’C列に一列空けてファイル1から転記、不要な行を抹消  range("C:C").insert shift:=xlshifttoright  range("C1:C" & lastrow).formula = "=VLOOKUP(B1,Sheet1!A:B,2,FALSE)"  on error resume next  range("C1:C" & lastrow).specialcells(xlcelltypeformulas, xlerrors).entirerow.delete  range("C1:C" & lastrow).value = range("C1:C" & lastrow).value end sub ていうか、マクロはほとんとどこも変わらないですけどね。 #ご相談で前に教わったのから新しく質問するときは、手抜きして「前のご相談(や教わったの)をコピーして情報提供する(したつもりになってる)」のは絶対にやめて、「いまは実際にどうやってるのか」「今度は何をしたいのか」キチンと正しく情報提供する事を憶えて下さい。

noname#196865
質問者

お礼

有難う御座いました。

noname#196865
質問者

補足

ご回答有難う御座います。 >「いまは実際にどうやってるのか」「今度は何をしたいのか」 >キチンと正しく情報提供する事を憶えて下さい。 承知致しました。 「いまは実際にどうやってるのか」 は、 ご教示頂きました通りで、出来ました。 VLOOKUPを、使う方法は、すごいです。 少ないコード数でばっりち成果が出ます。 「今度は何をしたいのか」 は、申し訳御座いません。更に以下をしたいのですが、 教えて下さい。 1、Sheet2をコピーして、resultを作り←上記マクロで既に出来上がり 2、Sheet1とのNo.を比較して、共通な番号を残し、(この場合、a1とa2)  後の行は削除して 3、今度は列を追加しないで、 科目の下(同じ行内で)に、Sheet2の「系」 難易度の下(同じ行内で)に、Sheet2の「ランク」 を入れたいです。 これまで通り、VLOOKUPを使い、コードはあまり変更しない方がありがたいです。 以上、よろしく御願い致します。 下記は、excelを、コピペしたのですが、うまく貼り付けられませんでした。 sheet1 No. 科目 難易度 f2 物理 9 f2 数学 10 a1 化学 2 a2 生物 2 Sheet2 番号 No. 系 ランク 1 c4 文系 A 2 c5 文系 S 3 a1 理系 G 4 a2 理系 F result 番号 No. 科目 難易度 1 a1 化学 2 理系 G 2 a2 生物 2 理系 F

関連するQ&A

  • 教えてマクロの記述?

    シート1に記述した内容をシート2に一覧形式で入力するマクロを以下の通り作成しました。 シート1に記述した内容を、別のブックのシートに一覧形式で入力していくマクロに変更するには どのようにマクロの記述をすれば宜しいのでしょうか?マクロの初心者にも分るようにご教授 いただければ助かります。よろしくお願いします。 Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = Worksheets("sheet1").Range("B7").Value .Range("F" & LastRow).Value = Worksheets("sheet1").Range("B9").Value .Range("G" & LastRow).Value = Worksheets("sheet1").Range("B11").Value End With End Sub

  • 他のブックでマクロを実行するには?

    以下のマクロを実行すると同一ブック内の他のシートに入力 されますが、これを他のブックのシートに入力されるように するには、具体的にどのようにすればいいのでしょうか? ご教授ください。 ---------------------------------------------------------------- Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = Worksheets("sheet1").Range("B7").Value .Range("F" & LastRow).Value = Worksheets("sheet1").Range("B9").Value .Range("G" & LastRow).Value = Worksheets("sheet1").Range("B11").Value End With End Sub

  • エクセル マクロ IF関数について

    Sheet1にグループボックス内で、チェックボタンで項目を選択するとA1に記載されるように作成、マクロで入力ボタン作成しボタンをクリックするとSheet2に記載されるように作りました。しかし、項目が多いためSheet2を見るとABCDEFGなどの列に空白が目立ち使いづらいです。 そこでIF関数を使い何とか出来ないでしょうか? 例)SHEET1 B2に原因のグループボックスにカテゴリー(チェックボックスにて1)入力ミス、2)人、3)機械) B3に対応のグループボックスにカテゴリー(チェックボックスにて1)外注、2)修正、3)報告) と作り、それらがチェックされていたら、A1の列に表示され入力ボタンを押したら、Sheet2のAには原因、Bには対応と記載されるようにしたいです。その時Sheet1のA列に空白があれば、Sheet2の列に表示するようにしたいです。 実際のマクロ記入 Sub 入力() Dim LastRow As Long With Worksheets("Sheet2") LastRow = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1 .Range("A" & LastRow).Value = Worksheets("Sheet1").Range("A6").Value .Range("B" & LastRow).Value = Worksheets("Sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("Sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("Sheet1").Range("A9").Value .Range("E" & LastRow).Value = Worksheets("Sheet1").Range("A10").Value .Range("F" & LastRow).Value = Worksheets("Sheet1").Range("A12").Value .Range("G" & LastRow).Value = Worksheets("Sheet1").Range("A13").Value .Range("H" & LastRow).Value = Worksheets("Sheet1").Range("A15").Value .Range("I" & LastRow).Value = Worksheets("Sheet1").Range("A16").Value .Range("J" & LastRow).Value = Worksheets("Sheet1").Range("A19").Value End With End Sub お願いします教えてください。

  • エクセルのフォームのVBAについて

    VBAがまったくわからないのに参考書を見て高度な事に挑戦しています フォームは作れてフォームをクリックやら入力やらして作ったOKボタンを押すと シート2のA1B1C1‥の列に入力文字だけが羅列されます。 しかし次にやろうとするとA2B2C2‥と下に行かず又A1B1C1‥の列の文字が変更になり続きません。何がいけないのでしょうか? Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row .Range("A" & LastRow).Value = Worksheets("sheet1").Range("A5").Value .Range("B" & LastRow).Value = Worksheets("sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("A10").Value End With End Sub と参考書とおりいれたのですが‥。教えて下さい。

  • コピペマクロを高速化したい(Excel)

    見よう見まねで以下のようなコードを書いてみたのですが、 これだと表示にやや時間がかかるので改善したいです。 ------ Sub コピペ() Dim i As Long i = Range("A1") Range("C12").Value = Worksheets("sheet2").Cells(i, 2).Value Range("D12").Value = Worksheets("sheet2").Cells(i, 3).Value Range("E12").Value = Worksheets("sheet2").Cells(i, 4).Value Range("F12").Value = Worksheets("sheet2").Cells(i, 5).Value Range("G12").Value = Worksheets("sheet2").Cells(i, 7).Value ------ こんな感じでコピペしたい値があと15個くらいあります。 コピー元とコピー先のセル配置には法則性があまりありません。 よろしくお願いします。

  • エクセルのマクロを教えてください。

    マクロの初心者です。 特に変数が全く使えず、下記もどのように記載していいのかわからないため教えていただけないでしょうか。 ユーザーフォームのtextbox2に開始番号があります。 textbox3に本数があります。 sheet1のB12セルには開始番号が入ります。 開始番号から本数分+1したものを順番にセルに入っていくようにしたいです。 ただ、入れたいセルが横→左下(開始番号の列)→横→左下(開始番号の列)・・・としたいため、どのように書いていいのかわかりません。 地道に書くのであれば、下記のようになると思うのですが、変数を使って書く場合はどのようになるのか教えていただけないでしょうか。 Worksheets("Sheet1").Range("B12").Value = TextBox2.Value If TextBox3.Value = 2 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 ElseIf TextBox3.Value = 3 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 ElseIf TextBox3.Value = 4 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 ElseIf TextBox3.Value = 5 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 Worksheets("Sheet1").Range("B14").Value = TextBox2.Value * 1 + 4 ・ ・ ・ End If

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • Excelのマクロについての質問です。マクロに関しては初心者です。

    Excelのマクロについての質問です。マクロに関しては初心者です。 温度を計測する実験をしています。sheet1に計測している数値が更新されていってどんどん書き込まれている状況です。 Dim fStop As Boolean 'グローバル変数を宣言 Private Sub Command1_Click() ' ' Macro1 Macro ' ' Dim iRows As Integer Dim sRows As String Dim i As Integer Dim tm As Single fStop = Fal For i = 1 To 500 Cells(1, 1) = i tm = Timer() + 5 Do DoEvents Loop While Timer() < tm ' 最終行の調査: iRows = Worksheets("Sheet1").UsedRange.Rows.Count ' 最終行をシート3にコピー Worksheets("Sheet1").Rows(iRows).Copy Destination:=Worksheets("Sheet4").Range("1:1") ' CH1 の最新データをシート3にコピー Worksheets("Sheet3").Range("B9").Value = Worksheets("Sheet1").Cells(iRows, 3).Value ' CH2 の最新データをシート3にコピー Worksheets("Sheet3").Range("C9").Value = Worksheets("Sheet1").Cells(iRows, 4).Value ' CH3 の最新データをシート3にコピー Worksheets("Sheet3").Range("D9").Value = Worksheets("Sheet1").Cells(iRows, 5).Value Next i End Sub Private Sub Command2_Click() fStop = True End Sub 上記のプログラムを作り、sheet1に書き込まれていってる数値の一番新しい数値のみをsheet3の特定のセルの場所に更新されていくように作りました。(コマンドボタン1で計測を開始、コマンドボタン2で計測終了) しかし計測する場所が増えるにつれて下記の部分のプログラムを増やさなければいけません。このプログラムを一まとめにして、指定されたsheet3のセルに書きこまれるようにしたいのですが、どのようなプログラムを加えればいいのでしょうか?Excelのバージョンは2003です。 ' CH1 の最新データをシート3にコピー Worksheets("Sheet3").Range("B9").Value = Worksheets("Sheet1").Cells(iRows, 3).Value ' CH2 の最新データをシート3にコピー Worksheets("Sheet3").Range("C9").Value = Worksheets("Sheet1").Cells(iRows, 4).Value ' CH3 の最新データをシート3にコピー Worksheets("Sheet3").Range("D9").Value = Worksheets("Sheet1").Cells(iRows, 5).Value

  • VBA Withの使い方

    2つのシートを操作するマクロを書いています。 Worksheets(A).Range("A1").Value = Worksheets(B).Range("A1").Value Worksheets(A).Range("B1").Value = Worksheets(B).Range("B1").Value Worksheets(A).Range("C1").Value = Worksheets(B).Range("C1").Value ・ ・ ・ 簡単に書くとこのような感じです。 =の両辺ともうまくWithでまとめてすっきりさせることは可能ですか?

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

専門家に質問してみよう