Excelマクロの記録を繰り返して重複した行をまとめる方法

このQ&Aのポイント
  • Excelでマクロの記録を繰り返し、重複した行をまとめる方法をご紹介します。
  • マクロの記録を繰り返すことで、重複した行を見つけることができますが、もっと効率的にまとめる方法もあります。
  • 順番を入れ替えたり、特定の条件を使ってまとめることで、より効率的に重複した行をまとめることができます。
回答を見る
  • ベストアンサー

EXCELでマクロの記録を繰り返して

EXCELでマクロの記録を繰り返して重複した行は分かる範囲でまとめたのですが、もう少しまとめられないかと思っています。 withで、まとめられなくても、順番を入れ替えたらまとまるものとか、逆にまとめようが無いものとか教えて頂けたらと思います。 よろしくお願いします。 With Selection .Phonetics.Visible = False 'フリガナ表示をオフに .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With With Selection .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($A3)),ISBLANK($L3))" .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority End With With Selection.FormatConditions(1).Interior .Pattern = xlSolid .PatternColorIndex = 0 .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($A3)),NOT(ISBLANK($D3)))" .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .TintAndShade = 0 .PatternTintAndShade = 0 .Color = 5296274 End With With Selection .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($A3)),ISBLANK($R3))" .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent5 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

シートを切替える度に設定し直す処理はかなり効率が悪いように思えるのですが、 そこはあまり突っ込まないようにします。 ただ、そのコードが"予約状況"シートであれば、シート保護で対応できるのでは?、という疑問はありますね。 以下、ざっくりコードで Sub sample()   Worksheets("予約状況").Unprotect   With Range("A1:A2,B1:B2,C1:C2,D1:D2,E1:E2,F1:F2,G1:G2,H1:H2,I1:I2,J1:J2," & _       "K1:K2,L1:L2,M1:M2,N1:O1,P1:Q1,R1:S1,T1:U1,V1:W1,X1:Y1,Z1:AA1," & _       "AB1:AC1,AD1:AE1,AF1:AG1,AH1:AI1,AJ1:AK1,AL1:AM1,AN1:AO1")     .HorizontalAlignment = xlDistributed     .VerticalAlignment = xlCenter     .WrapText = False     .Orientation = 0     .AddIndent = True     .IndentLevel = 0     .ShrinkToFit = False     .ReadingOrder = xlContext     .MergeCells = True   End With   Rows.RowHeight = 25   Rows("1:2").RowHeight = 17   Range("A:F").Columns.AutoFit   Range("G:K").ColumnWidth = 8   Range("B:C,L:M").ColumnWidth = 21   Range("N:AN").ColumnWidth = 23   Range("O1,Q1,S1,U1,W1,Y1,AA1,AC1,AE1,AG1,AI1,AK1,AM1,AO1").ColumnWidth = 9   Range("AP1").ColumnWidth = 0.2   Range("AQ1", Cells(1, Columns.Count)).Columns.Hidden = True   With ActiveWindow     .FreezePanes = False     .Split = False     Application.Goto Range("A1"), True     .SplitColumn = 3     .SplitRow = 2     .FreezePanes = True   End With   'Range("A3").Activate   With Range("A3", Cells(Rows.Count, "AO"))     .Phonetics.Visible = False     .VerticalAlignment = xlCenter     .WrapText = False     .Orientation = 0     .AddIndent = False     .ShrinkToFit = False     .ReadingOrder = xlContext     .MergeCells = False     With .FormatConditions       .Delete       .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($A3)),ISBLANK($R3))").Interior.ThemeColor = xlThemeColorAccent5       .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($A3)),NOT(ISBLANK($D3)))").Interior.Color = 5296274       With .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($A3)),ISBLANK($L3))").Interior         .Color = 65535         .Pattern = xlSolid       End With     End With   End With End Sub 基本、Selectなしで処理できます。 それに条件付書式を設定する範囲が決まっているなら、前レスでのR1C1形式での処理は必要ありません。 ただ、バージョン2007の場合はコメントアウトしている 'Range("A3").Activate が必要です。アクティブセルの位置によって数式がずれてしまいます。 2010はその点が改善されているため必要ないです。 『答え合わせ』 別に上記コードが正解ではないです。 自分を含め利用者が理解できてメンテナンスし易く、 目的通り動いてくれるコードならそれで構わないと思いますよ。

kichi4182
質問者

お礼

大変わかりやすい回答を何度もありがとうございます。 > Range("A:F").Columns.AutoFit ここですが、該当ブック使用者が意図する・意図しないにかかわらず、必要な幅以下にしてしまった時に、 .WrapText = False       '折り返し解除 になっていないと、狭い幅でAutofitされてしまうので、 >Range(Columns(1), Columns(mx)).ColumnWidth = 30# を入れていたのですが、折り返し介助を先にすれば、幅を30にする処理は必要無いのでしょうか。 あと、使用者は複数人居り、使用パソコンも使用ソフト(OS/OFFICE)もバラバラです。バージョン2007もあると思いますが、僕は2010です。 'Range("A3").Activate は、有効にした方が良いですよね? 'Range("$A$3").Activateとしなくても良いでしょうか。何度も申し訳ありません。

その他の回答 (3)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

>ここですが、該当ブック使用者が意図する・意図しないにかかわらず、必要な幅以下にしてしまった時に、 >: >を入れていたのですが、折り返し介助を先にすれば、幅を30にする処理は必要無いのでしょうか。 そうですね。先に折り返しを解除すれば良いかと思います。 別に設定しても差し支えないとも思いますけれども。 処理する場合は全列ではなくて、A:F列で良いはずですね。 With Range("A:F")   .ColumnWidth = 30   .Columns.AutoFit End With G列以降は固定値と非表示に設定しますから。 >あと、使用者は複数人居り、使用パソコンも使用ソフト(OS/OFFICE)もバラバラです。.. という事であれば Range("A3").Activate は必要です。 または#1のコードで書いたR1C1形式での設定に変更するかですね。 "A3"指定に関しては、数式ではないので相対参照や絶対参照は関係ありません。 $つけてもエラーになりませんが無視されます。 また、ver2003もあるようなら、ThemeColorプロパティは2007で追加されたプロパティなので使えません。 変更する必要があります。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

あ、失礼.. >With Range("A1:A2,B1:B2,C1:C2,D1:D2,E1:E2,F1:F2,G1:G2,H1:H2,I1:I2,J1:J2," & _ >    "K1:K2,L1:L2,M1:M2,N1:O1,P1:Q1,R1:S1,T1:U1,V1:W1,X1:Y1,Z1:AA1," & _ >    "AB1:AC1,AD1:AE1,AF1:AG1,AH1:AI1,AJ1:AK1,AL1:AM1,AN1:AO1") >  .HorizontalAlignment = xlDistributed >  .VerticalAlignment = xlCenter >  .WrapText = False >  .Orientation = 0 >  .AddIndent = True >  .IndentLevel = 0 >  .ShrinkToFit = False >  .ReadingOrder = xlContext >  .MergeCells = True >End With これだとN2:AO2の書式設定が漏れますね。 結合時のエラー対策含めて.. With Range("A1:AO2")   .HorizontalAlignment = xlDistributed   .VerticalAlignment = xlCenter   .WrapText = False   .Orientation = 0   .AddIndent = True   .IndentLevel = 0   .ShrinkToFit = False   .ReadingOrder = xlContext End With Application.DisplayAlerts = False Range("A1:A2,B1:B2,C1:C2,D1:D2,E1:E2,F1:F2,G1:G2,H1:H2,I1:I2,J1:J2," & _    "K1:K2,L1:L2,M1:M2,N1:O1,P1:Q1,R1:S1,T1:U1,V1:W1,X1:Y1,Z1:AA1," & _    "AB1:AC1,AD1:AE1,AF1:AG1,AH1:AI1,AJ1:AK1,AL1:AM1,AN1:AO1").MergeCells = True Application.DisplayAlerts = True : こうかな。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Sub sample()   Dim ref As Long   ref = Application.ReferenceStyle   Application.ReferenceStyle = xlR1C1   If TypeName(Selection) <> "Range" Then Exit Sub   With Selection     .Phonetics.Visible = False   'フリガナ表示をオフに     .VerticalAlignment = xlCenter '縦位置中央     .WrapText = False       '折り返し解除     .Orientation = 0        '文字の向き     .AddIndent = False       'インデント解除     .ShrinkToFit = False      '縮小表示解除     .ReadingOrder = xlContext   '文字読込み順解除(日本語では不要だと思う)     .MergeCells = False      '結合解除     With .FormatConditions       .Delete          '既設定の条件付書式を削除       .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK(RC1)),ISBLANK(RC18))").Interior.ThemeColor = xlThemeColorAccent5       .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK(RC1)),NOT(ISBLANK(RC4)))").Interior.Color = 5296274       .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK(RC1)),ISBLANK(RC12))").Interior.Color = 65535     End With   End With   Application.ReferenceStyle = ref End Sub ..こんな感じで良いかと思われます。 .WrapTextなどの書式設定の箇所は、既に設定されていたらそれを解除するコードなので、 考慮する必要が無い新規シートなどでは割愛できます。 コードを実行する作業環境に合わせて判断してください。 .FormatConditions.Delete は既に条件付書式が設定されていたらそれを削除するコードです。 既設定を生かして条件を常に追加する場合は .Delete は削除してください。 元コードの.SetFirstPriority は優先順位を1番目にする設定ですので、 最後に追加した条件の優先順位が高くなります。 逆に優先順位が高い順番に.Addすれば設定不要です。 .PatternColorIndex や .TintAndShade などは既定の設定だから不要と判断しましたが、 別途設定する必要がある時は With .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK(RC1)),ISBLANK(RC12))").Interior   .Color = 65535   .Pattern = xlSolid End With ..のようにしてください。 .StopIfTrue = False「条件を満たす場合は停止」しない設定は、 今回の場合は.Interior(背景色)の設定のみで、実質効果がないので不要だと思われます。 さて。 Dim ref As Long ref = Application.ReferenceStyle Application.ReferenceStyle = xlR1C1 : Application.ReferenceStyle = ref この箇所がややこしいのですが... 実は『Selection』、つまりコード実行前に選択しているセルに対して設定する場合、 例えば10行目を選択して .Add(Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($A3)),ISBLANK($R3))").Interior.ThemeColor = xlThemeColorAccent5 ..とやってしまっていいものかどうか、という問題があります。 $A3、$R3、と指定されているという事は列固定で行は相対指定したいという事ですよね。 その場合、数式をR1C1形式で設定するという方法があります。 "=AND(NOT(ISBLANK($A3)),ISBLANK($R3))" ↓ "=AND(NOT(ISBLANK(RC1)),ISBLANK(RC18))" 2003以前のバージョンはこれで自動的にR1C1形式で指定されているんだな、とExcel君が判別してくれていたんですが 2007以降だと A1形式のRC列なのか、行相対でA列固定のR1C1形式なのか判別できません。 そこで Dim ref As Long ref = Application.ReferenceStyle 最初に、現在の列表示形式を変数refに控えておいて Application.ReferenceStyle = xlR1C1 R1C1形式にして条件付書式を設定し、終わったら Application.ReferenceStyle = ref 控えておいた元の形式に戻す処理をしてます。 もっとも、必ず3行目からセルを選択して実行する、という事が保証されるなら不要な処理ですが。 そのコードだけでは判断できませんので念のため入れました。 If TypeName(Selection) <> "Range" Then Exit Sub ..これも、セルではなく図形やグラフを選択して実行すればエラーになるので、その予防で念のため入れました。

kichi4182
質問者

お礼

早速の丁寧な回答と解説ありがとうございます。大変分かり易かったです。また、回答中の注釈も、開発者が変わったとしても分かりやすいものだと思います。本当にありがとうございました。 元コードは Worksheet_Activate()の一部であり、当該コードの前の部分で、 ' 選択セル位置の割り出し row = ActiveCell.row: column = ActiveCell.column max = Rows.Count: mx = Columns.Count Worksheets("予約状況").Unprotect Range("A1:A2,B1:B2,C1:C2,D1:D2,E1:E2,F1:F2,G1:G2,H1:H2,I1:I2,J1:J2,K1:K2,L1:L2,M1:M2,N1:O1,P1:Q1,R1:S1,T1:U1,V1:W1,X1:Y1,Z1:AA1,AB1:AC1,AD1:AE1,AF1:AG1,AH1:AI1,AJ1:AK1,AL1:AM1,AN1:AO1").Select With Selection .HorizontalAlignment = xlDistributed .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = True .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With Range("A1:AO2").Select With Selection .HorizontalAlignment = xlDistributed .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = True .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext End With 'Cells.EntireRow.Hidden = True 'Cells.EntireColumn.Hidden = True Rows("1:2").RowHeight = 17# Rows("3:" & max).RowHeight = 25# Range(Columns(1), Columns(mx)).ColumnWidth = 30# Columns("AP").ColumnWidth = 0.2 Columns("A:M").EntireColumn.AutoFit Columns("G:K").ColumnWidth = 8# Range("B:C,L:M").ColumnWidth = 21# Columns("N:AO").ColumnWidth = 23# Range(Columns("AQ"), Columns(mx)).EntireColumn.Hidden = True ActiveWindow.FreezePanes = False Range("A1").Activate Range("A1").Select Range("D3").Select ActiveWindow.FreezePanes = True Range("O:O,Q:Q,S:S,U:U,W:W,Y:Y,AA:AA,AC:AC,AE:AE,AG:AG,AI:AI,AK:AK,AM:AM,AO:AO").ColumnWidth = 9# Cells.FormatConditions.Delete '----------------------------------------------------------------------------------------------------- Range(Cells(3, 1), Cells(max, 41)).Select ' Range("A3:AO1048576").Select としてあるのです。因みに1~2行目はタイトル行にしてあります。ここも、無駄なコードってありますか?自分でも見てみますので、答え合わせの意味で教えて頂けるとありがたいです。 今回教えて頂いたことを参考にもっと勉強しようと思います。ありがとうございます

関連するQ&A

  • Excelマクロの記述をもっとわかりやすくしたいのですが、どなたかご教

    Excelマクロの記述をもっとわかりやすくしたいのですが、どなたかご教示お願いします。 Excel2007使用。下記はマクロを記録として作成しました。省略できるものは省略して見やすくしたいのですが、どこを修正していいのか困っています。 範囲は「A2:A1000、B2:B1000」としていますが、「値が入っている範囲」としたい場合はどのように記述したらよいのでしょうか。 マクロ現在勉強中です。よろしくお願いいたします。 Sub CHK() Range("A2:A1000").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=COUNTIF($B$2:$B$1000,A2)>0" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent2 .TintAndShade = 0.599963377788629 End With Selection.FormatConditions(1).StopIfTrue = False Range("B2:B1000").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=COUNTIF($A$2:$A$1000,B2)>0" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent2 .TintAndShade = 0.599963377788629 End With Selection.FormatConditions(1).StopIfTrue = False End Sub

  • エクセルのマクロ、VBAに関する質問

    エクセルのマクロ、VBAに関する質問です。 下記コード3行目の"ここヘルプ!"のところを ”「選択範囲左上のセル Selection(1)」を「A1形式」で「行だけ絶対参照 xlAbsRowRelColumn」したものに10足した値” にしたいです。 例:選択範囲がA1:D5なら”A$1+10”   選択範囲がB4:H78なら”B$4+10” もうちょっとで出来る気がするので教えて下さい。 Sub 基準値+1o以上をハッチング() Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="ここヘルプ!" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 52479 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub

  • エクセルについてです。マウスで選択した範囲に、条件付き書式設定で80点

    エクセルについてです。マウスで選択した範囲に、条件付き書式設定で80点以上のセルの背景を赤にする、というマクロを作成したいと思います。選択する範囲は毎回異なります。以下のマクロはマクロの記録で作成したものです。このRangeの部分をマウスで選択した範囲に変更したいのですが、どうしたら良いのでしょうか?範囲の取得はマクロを実行して、途中で「マウスで範囲を指定してください」というメッセージを表示させてからにしたいのですが。 Sub 背景を赤() Range("B13:E19").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="=80" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13551615 .TintAndShade = 0 End With End Sub

  • 保護されているシートでマクロ実行するとエラー

    Excel2010で勤務表を作っています。 A列にとある文字列(承認)と入力すると、その行が保護されるマクロを、下記URLからコピペして使わせて頂いてます。 http://questionbox.jp.msn.com/qa3277541.html 勤務表なので、土日祝日は網掛けになるよう条件付き書式を使っています。 休暇取得した場合は網掛けを付けて、休日出勤した場合には網掛けなしにしたり出来るようマクロをマクロの自動記録で作りました。 ところが、どこかの行が保護されている状態で、セルの網掛けを変更するマクロを実行すると 「実行時エラー'1004'アプリケーション定義またはオブジェクトの定義エラーです」と出てしまいます。 保護されている行ではなく、まだ保護はされていない行に実行しています。 エラーが出ているのは網掛けマクロから出ています。 以下、今エクセルファイルにあるマクロの構文になります。 網掛けマクロは全部で4つ作りました。 1)休日出勤した際に条件付き書式をクリアして網掛けなしにするマクロです。 Sub 休日出勤() ' 条件書式クリア Selection.FormatConditions.Delete End Sub ※エラーになっている部分です。 2)平日休んだ日に網掛けをするマクロです。 Sub 休日() ' 網掛け With Selection.Interior .ColorIndex = 0 .Pattern = xlGray16 .PatternColorIndex = xlAutomatic End With End Sub 3)2)のマクロで休日にしたけど、やっぱり出勤したという時に、1)だと網掛けなしにならなかったので、網掛けなしにするマクロを作りました。 Sub網掛けなし() ' 網掛けなし With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub 4)ごちゃごちゃいじってしまって最初の状態に戻したいと思ったので条件付き書式を再設定するマクロを作りました。が、2)の休日マクロを実行したセルは元に戻らないので仕方なく3)の網掛けなしマクロを実行しなければなりません。 Sub 書式クリア() ' 条件書式再設定 Range("A6:K36").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=WEEKDAY($B6,2)>=6" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlGray16 .PatternColorIndex = xlAutomatic .ColorIndex = xlAutomatic End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=OR(WEEKDAY($B6)=1,COUNTIF(祝日,$B6))" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlGray16 .PatternColorIndex = xlAutomatic .ColorIndex = xlAutomatic End With Selection.FormatConditions(1).StopIfTrue = False End Sub ※この中のSelection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=WEEKDAY($B6,2)>=6"の部分がエラーと出ています。 ※1)から3)は網掛けしたいところ、網掛けなしにしたいところを範囲選択してから実行しなければなりません。 その他、保護を解除する際にパスワード認証が欲しかったので、「保護解除」ボタンを押すためにパスワード認証させるマクロもあります。 これは特に問題なく動いています。 5)パスワード認証つき保護解除マクロ Sub password() Dim pw As Long pw = Application.InputBox( _ prompt:="パスワード入力", Type:=1) If pw <> "123" Then MsgBox "パスワードが違います" Exit Sub Else MsgBox "保護解除しました" ActiveSheet.Unprotect End If End Sub 6)行ごとに保護するマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r, rng As Range Set rng = Intersect(Target, Columns(1)) If Not rng Is Nothing Then If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For Each r In rng If r.Value = "承認" Then r.EntireRow.Locked = True Else r.EntireRow.Locked = False End If Next r ActiveSheet.Protect DrawingObjects:=True, Contents:=True End If End Sub マクロに関してはド素人で、自動記録かWebで調べて見つけたマクロをちょっと加工して使う程度です。 どうか知恵をお貸しください。よろしくお願いします。

  • 複数の条件付書式

    B列に1~5までに数字がランダムにはいっています。 条件は ・B列が空白ならA列は無色 ・B列が1ならA列は赤 ・B列が2ならA列は青 ・B列が3ならA列は黄色 ・B列が4ならA列は緑 というのをマクロで行ないたいです。 自分で記録して Sub Macro32() Columns("A:A").Select Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=""""" Selection.FormatConditions(1).Interior.Pattern = xlNone Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=1" Selection.FormatConditions(2).Interior.ColorIndex = 38 Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=2" Selection.FormatConditions(3).Interior.ColorIndex = 40 End Sub 4つ目に Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=3" Selection.FormatConditions(4).Interior.ColorIndex = 32 とするとエラーになります。 3つ以上の条件付書式の書き方を教えてください。 あとこの構文のSelectionはwithで省略できますか? よろしくお願いします。

  • VBAで条件付書式設定方法

    次の内容の件です Dim wArray As Variant Dim wI As Integer ' セルA3:K3の条件付書式設定 A3の設定:A3=B3は黒,A3<B3は緑,A3>B3は赤,以降同様に wArray = Array(, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L") For wI = 1 To UBound(wArray) - 1    Sheets("Sheet1").Cells(3, wI).Select    Selection.FormatConditions.Delete    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$" & wArray(wI) & "3=$" & wArray(wI + 1) & "3"    With Selection.FormatConditions(1).Font      .Bold = False      .Italic = False      .ColorIndex = xlAutomatic    End With    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$" & wArray(wI) & "3<$" & wArray(wI + 1) & "3"    With Selection.FormatConditions(2).Font      .Bold = False      .Italic = False      .ColorIndex = 10    End With    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$" & wArray(wI) & "3>$" & wArray(wI + 1) & "3"    With Selection.FormatConditions(3).Font      .Bold = False      .Italic = False      .ColorIndex = 3    End With Next wI 実行時にアクティブセルにならないコーディング方法は? また、もっと合理的な、シンプルな方法はないでしょうか? いろいろと、やってみましたが、エラーとか行ズレとなり困っています よろしくご教示ください

  • Excel2013,macroのcopy

    Excel2013でマクロ実行するのですが、最後のstepの「条件付き書式」のcopyが上手く行きません。どなたかご教授お願いします。 A~J列x約4000行(1行~5行まではTytle行)のsheetです。 A列は日付で、過去からの日付となって居ます。 このsheetを見易くする為にA6行に 「条件付き書式」 =mod(month(A6),2)=0 を設定し、下記のmacro式でA6~J4000にCOPYするのですが、結果は上手く行きません。 ※1:偶数月行のA列のみ正確に書式設定されるが、全列(A~J)にならない。 ※2:奇数月のところどころ(列)に書式が設定される。 の不具合が生じます。 考えられる原因は何でしょうか?、ご教授願えませんでしょうか?。 与えたmacro Range("A6").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=MOD(MONTH(A6),2)=0" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 11200714 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = True Selection.Copy Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("A6").Select End Sub

  • エクセルのマクロの実行場所(セル)の指定(初心者)

    こんにちは。いつもお世話になっております。 ここで色々教わりながら、本も参考に色々試行錯誤しながらあがいている超初心者です。 下記のマクロを個人ブックに保管して、複数あるブックのセルに書式設定をしようとしています。 超初心者故マクロのコードが書けないので、マクロの記録で下記の動作をマクロにしようとしました。 文書Noと入力した日付の整合性をチェックし、外れた場合(例:2017年4月なら、Noは1704からら始まらないと)青斜体にしたい。 一応正常に動くことは確認したのですが、この書式設定を実行するセルがブックによってちがっています。 下記の例は入力日をA1に入れることにしていますが、実際には列も行も違っています。(さらにはこれで設定した書式を、書式のコピーで下に必要な行数分コピーすることになります)  「相対参照で記録」とか、できたマクロのコードの指定セルの$を取ってみるとか思いつくことは試行してみたのですが、うまく行きません。 選択しているセルに設定する為には、何処をどう修正すれば良いのでしょう? 対象ブックが500、使用頻度が高く当面書式設定したいブックが200近くあるので何とかマクロで対処したく宜しくお願いします。 Sub 文書Noと日付() ' Keyboard Shortcut: Ctrl+d Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=LEFT($A$1,4)<>TEXT(TODAY(),""yymm"")" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = False .Italic = True .Color = -65536 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub

  • VBA 選択範囲の中で、更に一番上の行を指定したい!

    タイトルの通りです。 選択範囲に罫線を引くマクロを作成しました。 外に太い枠線、中は点線を引き、選択範囲の一番上の行を灰色の塗りつぶしにしたいのです。 しかし、罫線はうまくいきましたが、一番上の行の指定がうまくできません。 Sub 罫線をひく() ' With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlHairline End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = xlAutomatic .TintAndShade = 0 .Weight = xlHairline End With ActiveWindow.SmallScroll Down:=12  ←ここを変えたいのですが、どうすればよいかわかりません。 With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = -0.499984740745262 .PatternTintAndShade = 0 End With End Sub どうすればよいか、もしご存知の方がいらっしゃいましたら、ご指導ください。 よろしくお願いたします。

  • excel2000 条件付書式5つ

    A1~J10に100個の数値があり、 行ごとの1位~5位にそれぞれ書式を あたえます。 マクロの記録機能を使って1位~3位を。 その後別で4位・5位を記録し、くっつけて みました。 つけたい書式は 以下のマクロの通りのセルのパターン・フォントの色です。 以下は記録したものをくっつけてつくったマクロです。 動作しません。 Sub 条件付書式5つ() Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,1)" Selection.FormatConditions(1).Font.ColorIndex = 2 Selection.FormatConditions(1).Interior.ColorIndex = 1 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,2)" Selection.FormatConditions(2).Font.ColorIndex = 2 Selection.FormatConditions(2).Interior.ColorIndex = 16 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,3)" Selection.FormatConditions(3).Interior.ColorIndex = 15 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,4)" Selection.FormatConditions(4).Font.ColorIndex = 2 Selection.FormatConditions(4).Interior.ColorIndex = 3 Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=LARGE($A1:$J1,5)" Selection.FormatConditions(5).Font.ColorIndex = xlAutomatic Selection.FormatConditions(5).Interior.ColorIndex = 38 End Sub 初心者のためどうしたらいいのかまったく わかりません。 どうぞお願いします。

専門家に質問してみよう