
Excelでマクロを設定したのですが、なぜかきちんと反映されません。
以下、主な作業(実際の作業とは少し違いますがだいたい主な作業)を記載してみました。なぜ反映されないのか分からないので、もしお分かりになる方がいらしたら教えてください。必要な情報が足りない場合は、付け足します!マクロ初心者、というか、Excelも関数をたまに使う程度なので、基本から間違えてたりするかもしれませんがお願いいたします。
※一連の作業がまずワークシートを1枚増やして、その後、必要なデータを貼り付け、さらに作業にうつります。ということで、キリのいいところで作業を2つに分けています。
【STEP1】
新しいマクロの記録
ok
挿入 ワークシート
Sheet4タブを a と変更
Sheet1タブを b と変更
Sheet2タブを c と変更
Sheet3タブを d と変更
記録終了
【STEP2】
新しいマクロの記録
ok
タブabcdを選択 作業グループの状態で、
全体の文字サイズを10に変更
行を3行挿入
A1セルの文字サイズを16に変更
4行目を選択し、文字位置を中央揃え
A4・B4・C4・D4・E4・F4のセル色を青に変更
シートaのA1にaと入力
シートbのA1にbと入力
シートcのA1にcと入力
シートdのA1にdと入力
シートaとシートcとシートdを選択 作業グループの状態で、
B列・C列を選択 桁区切りスタイルに変更
シートcを選択
C列・D列を選択 桁区切りスタイルに変更
G4セルを青に塗りつぶし
記録終了
保存
(Book1.xls)
新規作成
マクロ
Book1.xls!Macro1 実行
★シートabcdにそれぞれ必要なデータを貼り付ける。
マクロ
Book1.xls!Macro2 実行
⇒シートdのみにマクロで記録させたものが反映されている。
他のシートは部分的に反映されたりしている。
No.2ベストアンサー
- 回答日時:
こんにちは。
最初に、別なコメントですが、ご質問文のように、自分のすることを論理的に、そしてきれいに並べられる人は、意外に早くマクロは上達します。もう、それで半分以上は出来たに等しいです。
マクロのほとんどは、一行のマクロの積み重ねです。後は、それぞれをどういう表現をするかだけです。その表現の仕方を知らないから出来ないだけです。それさえ分かれば、たぶん、私が書かなくても、yukaaikawaさんは、出来るはずだと思います。
掲示板では、いろんなノウハウが紹介されたりしますが、目的を達成できさえすれば、それで良いと思います。分からないことは、後は、VBAの逆引き辞典やインターネットで細かいことを調べればよいのです。
今回は、入門レベルに合わせて書くことにし、#1で書いた話とは少し違いますが、元の文章をそのままマクロに書き換えてみました。あまり、私が初歩的な書き方をすると、他の回答者の方から、思わぬ突っ込みを受けかねませんもので、少しアレンジはしています。
なお、塗りつぶしの青色は、私などは、パステルカラーを使うことにしています。文字の色の場合は、濃い青を使うようにしています。
色番号は、ヘルプで調べると出てきます。
「GridlineColorIndex」 プロパティをみてください。 (グリッドライン)
'行を3行挿入
'?.Rows("1:3").Insert shift:=xlShiftDown
の始点となる部分が、1行目ということなら、こうなります。
'--------------------------------------------
'標準モジュール
Sub TestMacro1()
Dim i As Integer
If Worksheets.Count < 4 Then
'挿入 ワークシート
Worksheets.Add
End If
For i = 1 To 4
With Worksheets(i)
.Name = Mid("abcd", i, 1)
'全体の文字サイズを10に変更
.Cells.Font.Size = 10
'行を3行挿入
'*ここが良く分かりません。1行目からという条件です
.Rows("1:3").Insert shift:=xlShiftDown
'A1セルの文字サイズを16に変更
.Range("A1").Font.Size = 16
'4行目を選択し、文字位置を中央揃え
.Rows(4).HorizontalAlignment = xlCenter
'A4・B4・C4・D4・E4・F4のセル色を青に変更
.Range("A4:F4").Interior.ColorIndex = 34 'パステルの水色
'.Range("A4:F4").Interior.Pattern = xlSolid 'たぶん要らないはず
'シートa~dのA1にa ~d と入力
.Range("A1").Value = Mid("abcd", i, 1)
'aとシートcとシートdをB列・C列を選択 桁区切りスタイルに変更
'分岐
If .Name <> "b" Then
.Columns("B:C").NumberFormatLocal = "#,##0"
Else
'シートcをC列・D列を選択 桁区切りスタイルに変更
.Columns("C:D").NumberFormatLocal = "#,##0"
' G4セルを青に塗りつぶし
.Range("G4").Interior.ColorIndex = 34
End If
End With
Next i
'最初のシートに戻る
Worksheets(1).Select
End Sub
さっそくのコメントありがとうございます!
教えていただいたとおりにやってみたら(というかとりあえず、コードをコピペ)、完璧に出来ました!本当にありがとうございます!
ただ、以下の要因で、今回は、シートごとにマクロの記録ボタンを押して行うことにいたしました。
・部分的に省略したりだとか、なるべくシンプルにして質問させていただいたため、コードを読み取って、書き換えないとならない部分がある。それをするにはもう少し勉強してからでないと間違える恐れがある。
・一連の作業は、ワークシート挿入後、別のところからデータを貼り付けて、再度処理を開始しなければならない。そのためのコードを書き換える能力がない。
今回、コードを編集したり、貼り付けたりする機能があることを初めて知りました。とても勉強になりました。それから、コメントくださった中の「'」がコメントアウトだということにも後から気付きました。そのほか、いろいろと勉強になりました。
少し勉強してから質問できるように、がんばっていきたいと思います。が、なかなかそれが長い道のりだったりするんですよね。。でもあきらめないようにします。ありがとうございました!
後で締め切ってポイント付与作業させていただきます!取り急ぎお礼まで。失礼します。
No.1
- 回答日時:
こんにちは。
手作業でされたことは、やはり手作業の中の約束事で出来上がっているのです。
特に作業グループは、あくまでも、マニュアル操作が主な使い方で、VBAでは、Selection というところで、シート全体を通した確保がされません。したがって、それらは個別にしなくてはなりません。
例:
For Each nam In Array("a","b","c","d")
Worksheets(nam).Select
'-フォントの色
'-フォントサイズ
'-桁区切り書式
'-塗りつぶし
Next nam
としてみるとよいと思います。そして、個別のものは、個別に回すようにすればよいです。分からないようでしたら、また、書き添えます。
この回答への補足
ありがとうございます!
そうなんですね。マクロという意味やできることなど、ぼんやりとしか分かってなく、お手数をおかけしてしまっています。
ところで、例、を挙げていただきましたが、これをどこにどのように設定したらよいのでしょうか。申し訳ありませんがご教示いただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBA 実行しても結果が反映されない
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
VBAの計算結果が表示されない
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
VBAの再計算が反映されない件につきまして
Visual Basic(VBA)
-
6
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
7
エクセルVBAのエディターが上書きモード?に・・・・。
Excel(エクセル)
-
8
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
9
ExcelVBAで質問です。Workbook_openイベントが発生し
その他(Microsoft Office)
-
10
エクセルのマクロで検索・抽出したデータを修正及び更新して元データに反映
Excel(エクセル)
-
11
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
12
VBAで即反映させるには
その他(パソコン・スマホ・電化製品)
-
13
エクセルVBAが途中で止まります
Visual Basic(VBA)
-
14
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
15
エラーになってないのにVBAが中断される
Excel(エクセル)
-
16
Excelで、あるセルの値に応じて行を自動挿入したい
Visual Basic(VBA)
-
17
エクセルのマクロが途中の行から適用されない
Excel(エクセル)
-
18
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
19
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
20
別のシートから値を取得するとき
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
エクセルで複数のシートに画像...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
【ExcelVBA】マクロの入ったシ...
-
SUMIF関数【複数のシート...
-
エクセルの複数シートでのリン...
-
エクセル、条件をつけてのデー...
-
特定のシートのみ再計算させな...
-
エクセルのシー名を二段表示に...
-
コンボボックス?で選んだシー...
-
シート名を変更すると起動する...
-
エクセルで誤ってF11キーを押す...
-
Excel 全シート上のボタンを削...
-
エクセルで、シートの名前を変...
-
エクセルでシート1をページごと...
-
Excel でブック全体を検索するには
-
エクセル2013 検索→シート...
-
エクセルのシート連番の振り直し
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
ハイパーリンクでジャンプした...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルで複数のシートに画像...
-
確定申告用の医療費集計フォー...
-
エクセルのシー名を二段表示に...
-
EXCELの図形(テキストボックス)...
-
エクセル、特定のシートにパス...
-
Wordで差し込み印刷時に表示す...
-
ワークシートそのものの色を変...
-
Accessのテーブルを既存のExcel...
-
EXCELで存在しないシート...
-
エクセルの複数シートでのリン...
-
エクセルのファイルサイズが急...
-
エクセルの2つのシートを並び...
-
エクセルのシート連番の振り直し
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
おすすめ情報