• ベストアンサー

エクセルVBAで結合セルなどの色が一部消えません

色を付けてある結合セルセルが一部消えません。下のはマクロ記録してそのまま使っているものですが、なぜ消えないのか分かりません。 ちょっとたくさんありすぎてゴチャゴチャしていて恐縮ですが、消えない部分は。 AM42:AO43,AR42:AX43,BD42:BJ43,F45:T46,V45:AJ46の部分です。 使用上のクセとかなんかあるんでしょうか? Union(Range( _ "F57:T58,V57:AJ58,AM57:AO58,AR57:AX58,BD57:BJ58,F60:T61,V60:AJ61,AM60:AO61,AR60:AX61,BD60:BJ61,AV7:BC8,AU9:BC10,D16:AC17,G18:H19,O22:P23,W24:AE25,R32:AV34,F42:T43,V42:AJ43,AM42:AO43,AR42:AX43,BD42:BJ43,F45:T46,V45:AJ46,AM45:AO46,AR45:AX46,BD45:BJ46,F48:T49" _ ), Range( _ "F51:T52,V51:AJ52,AM51:AO52,AR51:AX52,BD51:BJ52,F54:T55,V54:AJ55,AM54:AO55,AR54:AX55,BD54:BJ55" _ )).Select Range("BD60").Activate Union(Range( _ "F57:T58,V57:AJ58,AM57:AO58,AR57:AX58,BD57:BJ58,F60:T61,V60:AJ61,AM60:AO61,AR60:AX61,BD60:BJ61,G65:T66,AM65:AO66,BD65:BJ66,G69:T70,AM69:AO70,BD69:BJ70,BB76:BJ78,AI80:AM81,AV7:BC8,AU9:BC10,D16:AC17,G18:H19,O22:P23,W24:AE25,R32:AV34,F42:T43,V42:AJ43" _ ), Range( _ "AM45:AO46,AR45:AX46,BD45:BJ46,F48:T49,V48:AJ49,AM48:AO49,AR48:AX49,BD48:BJ49,F51:T52,V51:AJ52,AM51:AO52,AR51:AX52,BD51:BJ52,F54:T55,V54:AJ55,AM54:AO55,AR54:AX55,BD54:BJ55" _ )).Select Range("AI80").Activate Selection.Interior.ColorIndex = xlNone

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

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

こんばんは。 単に、マクロらしく書けば、このようになるのでは? ループできるところは、ループして、全部、Union でつなげる必要はないような気がします。ただし、結合セルの具合によっては、うまくいかない可能性はあります。 Sub TestMacro1() Dim i As Long Dim j As Long Const iColor = xlNone Application.ScreenUpdating = False With ActiveSheet  For i = 42 To 60 Step 3   .Cells(i, 6).Resize(2, 15).Interior.ColorIndex = iClolor   .Cells(i, 22).Resize(2, 15).Interior.ColorIndex = iClolor   .Cells(i, 39).Resize(2, 3).Interior.ColorIndex = iClolor   .Cells(i, 44).Resize(2, 7).Interior.ColorIndex = iClolor   .Cells(i, 56).Resize(2, 7).Interior.ColorIndex = iClolor  Next i  For j = 65 To 69 Step 4   .Cells(j, 7).Resize(2, 14).Interior.ColorIndex = iClolor   .Cells(j, 39).Resize(2, 3).Interior.ColorIndex = iClolor   .Cells(j, 56).Resize(2, 7).Interior.ColorIndex = iClolor  Next j   .Cells(16, 4).Resize(2, 26).Interior.ColorIndex = iClolor   .Cells(18, 7).Resize(2, 2).Interior.ColorIndex = iClolor   .Cells(24, 23).Resize(2, 9).Interior.ColorIndex = iClolor   .Cells(22, 15).Resize(2, 2).Interior.ColorIndex = iClolor   .Cells(32, 18).Resize(3, 31).Interior.ColorIndex = iClolor   .Cells(9, 47).Resize(2).Interior.ColorIndex = iClolor   .Cells(7, 48).Resize(4, 8).Interior.ColorIndex = iClolor   .Cells(22, 15).Resize(2, 2).Interior.ColorIndex = iClolor   .Cells(76, 54).Resize(3, 9).Interior.ColorIndex = iClolor   .Cells(80, 35).Resize(2, 5).Interior.ColorIndex = iClolor  End With  Application.ScreenUpdating = True End Sub

4k3s4r3
質問者

お礼

ありがとうございました。うまくいきました。あんなゴチャゴチャしている中で、規則性を見つけてループさせるように考えることができるなんてすごいです。私は何時間もやってましたが・・・

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

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

提示されたコードのうち Range("BD60").Activate の前は意味がありません。 それ以降の部分にAM42:AO43,AR42:AX43,BD42:BJ43,F45:T46,V45:AJ46が含まれてないのでは? ほんとにごちゃごちゃなのでよくはわかりませんが。 Sub test01() Union(Range( _ "F57:T58,V57:AJ58,AM57:AO58,AR57:AX58,BD57:BJ58,F60:T61,V60:AJ61,AM60:AO61,AR60:AX61,BD60:BJ61,G65:T66,AM65:AO66,BD65:BJ66,G69:T70,AM69:AO70,BD69:BJ70,BB76:BJ78,AI80:AM81,AV7:BC8,AU9:BC10,D16:AC17,G18:H19,O22:P23,W24:AE25,R32:AV34,F42:T43,V42:AJ43" _ ), Range( _ "AM45:AO46,AR45:AX46,BD45:BJ46,F48:T49,V48:AJ49,AM48:AO49,AR48:AX49,BD48:BJ49,F51:T52,V51:AJ52,AM51:AO52,AR51:AX52,BD51:BJ52,F54:T55,V54:AJ55,AM54:AO55,AR54:AX55,BD54:BJ55,AM42:AO43,AR42:AX43,BD42:BJ43,F45:T46,V45:AJ46" _ )).Interior.ColorIndex = xlNone End Sub

4k3s4r3
質問者

お礼

ありがとうございました。全然気づきませんでした。ホントだっと思いました。

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

関連するQ&A

  • Excel VBA

    いつもお世話になっております。 ExcelのVBAの処理にてお聞きしたいのですが… Ret = MsgBox("項目を全て削除しますが、よろしいですか?", vbYesNo, "削除") If Ret = vbYes Then Worksheets("入力").Select Range("C10:I59").ClearContents Range("L10:R59").ClearContents Range("W10:Y59").ClearContents Range("AB10:AH59").ClearContents Range("AM10:AO59").ClearContents Range("AR10:AX59").ClearContents Range("BC10:BE59").ClearContents   ・   ・   ・ と長々しく書いているのですが、これをもっとスマートに 書く方法はありますか?? それから、こういったことが出来るなら教えて頂きたい のですが、、、 あるExcelのシート(1枚)を、所定のディレクトリに入って いるExcelファイル(数十ファイル)のシートの先頭に全て挿入して いくといったものなのですが、VBAで出来ますか?? 出来なくとも、近い感じの処理または、参考文献などあったら 教えて下さい。 宜しくお願い致します。

  • Rangeマクロのオブジェクトの記載について

    初歩的な質問で恥ずかしいですが、Rangeのオブジェクトが長いので3行ぐらいにしたいのですが、 Range("AA5:AD5,AP25:BC25,AD26:BC26,AM28:AX28,AM30:AX30,AO50:AY50,AK52:AX53,T56:AB56,N62:U62,I64:U64,K71:U71,AB71:AM71,I72:M72,T80").Select

  • 指定文字を除く曜日別のカウント

    いつもお世話になります。 WIN7 EXCELL2010 です。 1月にて説明します。 範囲は、 I13:AM12 です。 このとき A ~ F のみの文字を手入力します。 (A ~ D は就業 E:有休 F:公休) 曜日別の「就業日数」をAR13:AX24 今は解る範疇で何とか下記のようにしています。 AR13 には *AV13は「2」となります。 =SUMPRODUCT(($I$12:$AM$12="日")*(I13:AM13<>"")) AY13 には J13=E を引き算して 有休 公休の休みを除いています。  =SUM(AR13:AX13)-SUM(AO13:AP13) AO13 には =IF($B13="","",COUNTIF($I13:$AM13,$AO$10)) AO10=E AP13 には =COUNTIF(I13:AM13,$AP$10) AP10=F ご指導を仰ぎたいのは AV13 (木) の「2」という数字は就業と休みの合計ですがこれを E F を除いた純粋の就業数(この場合は「1」)する数式をお願いしたいのです。 良しくお願いいたします。

  • EXCELのセルの参照(関数)について

    よろしくお願いします。 セル(A1)~(AZ)の範囲における(AZ),(AV),(AR),(AN),(AJ),(AF),(AB),(X),(T),(P),(L),(H),(D)の各セルに文字列が入っている (または入っていない)場合で(BA)に「もし(AZ)が入力されていたら(AZ)の値を表示、もし(AZ)がブランクなら(AV)の値を表示、もし(AV)がブランクなら(AR)の値を表示、もし(AR)がブランクなら(AN)の値を表示・・・・」といった具合で関数を作成したいです。また(AZ),(AV),(AR),(AN),(AJ),(AF),(AB),(X),(T),(P),(L),(H),(D)のセルで穴あき状態で入力されていた場合は最も(AZ)寄りのセルを表示させたいです。 EXCEL2003で作成するいい方法はありますでしょうか?

  • excel vba 2000 rangeの範囲指定でGlobalエラー

    はじめて質問させていただきます。 excel 2000のvbaでRange("B:C,D:E,F:G,H:I,J:K,L:M,P:Q,T:U,V:W,Z:AA,AB:AC,AD:AE,AF:AG,AL:AM,AN:AO,AP:AQ,AR:AS,AT:AU,AV:AW,AX:AY,AZ:BA,BB:BC,BD:BE,BF:BG,BH:BI,BL:BM,BN:BO,BP:BQ,BR:BS,BT:BU,BV:BW,BX:BY,BZ:CA,CB:CC,CD:CE,CF:CG,CH:CI,CJ:CK,CL:CM,CN:CO,CP:CQ,CR:CS,CT:CU,CV:CW,DB:DC,DD:DE").Select のように非常に長い文字列で範囲を指定した場合、「Rangeメソッド失敗'_Global'オブジェクト」というようなメッセージが出ます。 最後のDD:DEをやめたり、連続する列をまとめるとエラーになりません。 どうも文字列に制限があるように思いますが、回避方法をご存知の方ご教示ください。

  • エクセル2010、VBAや関数について

    Private Sub CommandButton1_Click() Worksheets("商品マスタ").Activate Application.Calculation = xlCalculationManual If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData ActiveWindow.ScrollRow = 3 Range("AI1:AQ4").ClearContents Range("AI1:AQ4").NumberFormatLocal = "@" Range("AJ2:AK2").Value = Range("B2:C2").Value Range("AL2:AM2").Value = Range("D2").Value Range("AO2").Value = Range("E2").Value Range("AP2").Value = Range("V2").Value Range("AQ2").Value = Range("W2").Value Range("AN2").Value = Range("D2").Value If Me.TextBox1.Value <> "" Then ' コード Range("AK3").Value = "*" & Me.TextBox1.Value End If If Me.TextBox2.Value <> "" Then ' メーカー Range("AL3").Value = "*" & Me.TextBox2.Value & "*" End If If Me.TextBox3.Value <> "" Then ' <--シリーズ Range("AM3").Value = "*" & Me.TextBox3.Value & "*" End If If Me.TextBox4.Value <> "" Then ' <--サイズ Range("AN3").Value = "*" & Me.TextBox4.Value & "*" End If If Me.TextBox5.Value <> "" Then ' 入荷日 Range("AJ3").Value = Me.TextBox5.Value End If If Me.TextBox9.Value <> "" Then ' 仕入れ先 Range("AP3").Value = Me.TextBox9.Value End If If Me.TextBox12.Value <> "" Then ' 単体価格 Range("AQ3").Value = Me.TextBox12.Value End If If Me.TextBox6.Value <> "" Then ' 在庫数 Range("AO3").Value = Me.TextBox6.Value End If If Cells(3, Columns.Count).End(xlToLeft).Column > 34 Then Range("A2:W" & Rows.Count).AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Range("AI2").CurrentRegion, Unique:=False End If Range("AI1:AQ4").ClearContents ActiveWindow.ScrollColumn = 4 Range("A2").Activate Application.Calculation = xlCalculationAutomatic End Sub このようなマクロを組んでいるのですが、とても反応が遅いのですが、 シートにはA4-AG2000にデータが入っていて、 G4-U2000には =SUMIFS('[在庫.xlsx]02'!$AD:$AD,'[在庫.xlsx]02'!$AQ:$AQ,$A421,'[在庫.xlsx]02'!$AS:$AS,$F$2,'[在庫.xlsx]02'!$AT:$AT,G$2) このような関数が入っております。 これが原因で、動作が遅くなっているのでしょうか? 行の挿入等もとても遅いのですが、 G-U列の関数をやめてVBAで転記してから、検索をかけたら、早くなるのでしょうか? G-U列には関数での表記しかわからなかったため、関数をいれております。 解決法があれば教えてください。

  • ダブルクリックイベントの質問です。2010

    特定のセルをダブルクリックすると 現在時刻を 表示するコードがあります。 特定の セル以上で その機能が 無効になります。 原因は なんでしょうか?以下 そのコードです。 Private Sub worksheet_beforedoubleclick(ByVal Target As Excel.Range, cancel As Boolean) If Not Application.Intersect(Target, Range("d8:d9,h8:h9,l8:l9,l8:l9,p8:p9,r8:r9,t8:t9,x8:x9,ab8:ab9,af8:af9,aj8:aj9,an8:an9,ar8:ar9,av8:av9,d57:d58,h57:h58,l57:l58,p57:p58,r57:r58,t57:t58,x57:x58,ab57:ab58,af57:af58,aj57:aj58,an57:an58,ar57:ar58,av57:av58,d106:d107,h106:h107,l106:l107,p106:p107")) Is Nothing Then If Target = "" Then Target = Time cancel = True End If End If End Sub 以上です。 ちなみに ,106:l107,p106:p107のあとに ,T106:T107 を 追加 しますと  実行時エラー1004 Range メソッドは失敗しました。Worksheet オブジェクト と 表示され エラー と 表示されました。 よろしくお願いします

  • グリーン関数(連立常微分方程式)について

    お世話になっております。 グリーン関数を連立常微分方程式を解くような解法でやっていたら、参考書の解答と一か所異なる場所が出たのですが、よくわからなかったので質問させていただきます。 問題: uはxのみの関数であり -u'' +a^2 u = f(x) B.C. u(0) =α u(L)=β のとき、u(x)を求めよ。 解答: 連立常微分方程式として変形すると U=[u u']T (ただしTは転置のT) M=[-a 0] [0 a] (ただしM=2*2の行列 P=[1 1] [-a a] (ただしP=2*2の行列 V=[v1 v2]T U=PV とすると 与式は V'= MV + P-1[0 -f(x)]T = MV + f(x)/2a [1 -1]T すなわち v1' = -av1 + f(x)/2a v2' = av2 - f(x)/2a となります。 ここまでは僕の解答と参考書のそれは一致してます。 以降簡単のためv1のみ議論の対象とさせていただきます。 【参考書では】 v1= C1e^-ax + e^-ax∫(e^ay/2a)f(y)dy 積分区間0 to x となっております。 もちろんこのあとVからUに変換して、B.C.考えてu(x)を求めますが、これ以降は大丈夫そうなので割愛させていただきます。 【僕がやった解答は】 http://markun.cs.shinshu-u.ac.jp/learn/biseki/no_10/liner.html を用いたのですが、つまり v1' = -av1 の同次形の答えをz1(=C1e^-ax)としますと v1=w(x) z1と仮定して v1' = -av1 + f(x)/2aに代入すると w'= f(x)/(2az1) が出るので w=∫f(x)/(2az1) dx + C2 (不定積分) ゆえに v1 = wz1 = C3e^-ax + e^-ax∫(e^ax/2a)f(x)dx (不定積分) となり、参考書のものと異なってしまいます。 積分の文字事態は別にどうでもいいということは理解してますが ∫(e^ay/2a)f(y)dy 積分区間0 to x ∫(e^ax/2a)f(x)dx とは全く別物ですよね? どなたか、どこが間違っているのかご指摘して願えませんか? どうかよろしくお願いいたします。

  • Excel VBAについてご教ください

    いつも、こちらのサイトをみながら、VBAを勉強させていただいているのですが、 今回、自分のやりたいことが見当たりませんでしたので、ご教示いただければと思います。 やりたいことは、 (1)「エリア1」にある名称ごとに同じBookの別シートに振り分け (2)各シートで「累計売上」順(降順)に並べ替え の2つの作業を同時に行いたいのです。 また、 (1)には、あらかじめ決まったシートが用意されているので、 そのシートの決められた範囲にデータを移したいのと、 データを貼り付ける前に、前に残っている前回のデータを削除してから、同場所に貼り付けを行いたいです。 ちなみに、エリアが3つあるので、シートも3枚あります。 自分でも、いろいろとやってみて、 下記のようなコードを書いたのですが、あまりにも重くて、動きがわるかったため、 シンプルかつ、軽やかに動くコードの書き方をお教えいただければと思います。 よろしくお願いいたします。 Sub Macro2() Application.ScreenUpdating = False With Worksheets("元データシート") .Range("A5").AutoFilter _ Field:=9, _ Criteria1:="京前", Operator:=xlAnd .Range("F4:P65500").Copy _ Worksheets("前 品別").Range("AJ5") .AutoFilterMode = False .Range("A5").AutoFilter _ Field:=9, _ Criteria1:="京中", Operator:=xlAnd .Range("F4:P65500").Copy _ Worksheets("中 品別").Range("AJ5") .AutoFilterMode = False .Range("A5").AutoFilter _ Field:=9, _ Criteria1:="京後", Operator:=xlAnd .Range("F4:P65500").Copy _ Worksheets("後 品別").Range("AJ5") .AutoFilterMode = False End With Application.ScreenUpdating = True MsgBox "各地区シートにデータを振分けました。" End Sub 【元データの形式は以下のような形になってます。】     A    B    C    D     E       F      G      H      I     J   4  コード S番号 S名称  S名  月間個数 月間売上 累計個数 累計売上 エリア1  エリア2 5  4237  4025  AAA  あああ   3      150     7      350    京後    後A    6  6769  4025  AAA  いいい   2      100     5      250    京中    中B 7  3453  4028  BBB  ううう    5       50     5       50    京後    後C 8  4252  4029  CCC  えええ   1      110     9      990    京前    前A 9  3564  4027  DDD  おおお   0       0      8      80    京前    前A 10 8035  4022  EEE  かかか   1       30     2      60     京中    中B 11 9225  4026  EEE  ききき    2       40     3       60    京後    後A 以下5000行ぐらいデータが続きます。

  • excel 空白セルに自動で斜線をひきたいです

    EXCEL2007使用しています。 名簿シートと印刷シートがあります。 印刷シートのセルAJ33:AR37の結合セルに=IF(VLOOKUP($J$4,名簿!$A$2:$G$383,7)="","","印") がはいっています。 このセルが空白ならば斜線を引きたいのですが、なかなかうまくできません。 過去の質問等も参考にしましたが、斜線は引けても、今度は消えません・・・。 ちなみに連続印刷をすでに作ってあるのですが、この連続印刷にも対応させることは可能でしょうか? A1:C3の結合セルの名前は”番号”  印刷範囲の入力セルは”自”、”至”としてあります。 Sub 印刷開始() Range("番号") = Range("自") Do While Range("番号") <= Range("至") Sheets("印刷").PrintOut Range("番号") = Range("番号") + 1 Loop End Sub 説明力がなくて申し訳ないのですが、どうぞよろしくお願い致します。

専門家に質問してみよう