- ベストアンサー
【Excel VBA】空白の結合セルに右上り斜線を引く
Excel VBAは初心者です。 仕事で必要なため、アドバイスをいただけると非常に助かります。 よろしくお願いします。 【VBAで実現したいこと】 下記のようなセルで構成されている簡単な 申請書を作成しております。 結合セル1:ABCD列と4行目で結合されたセルで、氏名を入力します。 結合セル2:EFGH列と4行目で結合されたセルで、氏名を入力します。 結合セルA:ABCD列から5678行で結合されたセルです。 結合セルB:EFGH列から5678行で結合されたセルです。 ※結合セル1、2~10まで存在し、結合セルA、B~Jまで存在します。 結合セルAは結合セル1を参照し、結合セル1が空欄の場合 結合セルAに右上りの斜線を引きます。結合セル1が空欄でない場合、 何もしません。 結合セルBは結合セル2を参照し、結合セル2が空欄の場合 結合セルBに右上りの斜線を引きます。結合セル2が空欄でない場合、 何もしません。 同様な処理を、結合セルJ、結合セル10まで行います。 【教えていただきたいこと】 1.結合セルA~J、結合セル1~10全てが空欄だった場合、 空欄の結合セルは右上りの斜線を引きます。 下記のプログラムを作成しましたが、右上りの斜線が 引けません。 どのようにしたら良いでしょうか。 2.上記「VBAで実現したいこと」を行うためには、 下記のプログラムにどのような追加を行えば良いでしょうか。 【作成したプログラム】 Private Sub worksheet_change(ByVal target As Range) Dim i As Range For Each i In target If i.MergeArea.Value = "" Then i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlContinuous Else i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlNone End If Next i End Sub 以上、よろしくお願いします。
- coltcolt
- お礼率68% (11/16)
- Visual Basic
- 回答数5
- ありがとう数10
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 色々試してみましたが、やはりmerlionXXさんの添付画像のような結果になりませんでした。 ではどういう結果になったのですか? もしまったく作動しないのなら、マクロはどこに書きましたか? ひょっとしてシートモジュールではなく標準モジュールに書いてませんか?
その他の回答 (4)
- cj_mover
- ベストアンサー率76% (292/381)
#3、4です。何度もすみません。訂正です。 >そのままではVBAで扱えない関数なので、 >.EVALUATE メソッドに文字列式を渡し、 WorksheetFunction で扱えますので、この記述は誤りでした。 なので、動作は同じですが、 誤) If Evaluate("PHONETIC(" & TAISYOUHANNI & ")") = "" Then 正) If WorksheetFunction.Phonetic(.Cells) = "" Then 以上、修正をお願いします。
お礼
cj_moverさん、回答ありがとうございます。 cj_moverさんから教示いただいたプログラムにて 対応ができました。 また、早急な修正フォローも助かりました。 ありがとうございました。
- cj_mover
- ベストアンサー率76% (292/381)
#3です "追加"の意味を考えました。判別方法は色々あるけど 手っ取り早くワークシート関数のPHONETIC()を使ってみます。 そのままではVBAで扱えない関数なので、 .EVALUATE メソッドに文字列式を渡し、 Worksheet オブジェクトに文字列式の評価を問い合わせ 戻り値が "" かどうかで判定します。 要するに TAISYOUHANNI に(ふりがな情報を持つ)文字列セルがない場合、 と、それ以外とを判別します。 Private Sub Worksheet_Change(ByVal Target As Range) Const TAISYOUHANNI = "A4:AN4" If Intersect(Range(TAISYOUHANNI), Target) Is Nothing Then Exit Sub Dim oRng As Range For Each oRng In Intersect(Range(TAISYOUHANNI), Target) If oRng.MergeCells Then If oRng.MergeArea.Column = oRng.Column Then With oRng.Offset(1).MergeArea If oRng.Value = "" Then .Borders(xlDiagonalUp).LineStyle = xlContinuous Else .Borders(xlDiagonalUp).LineStyle = xlNone End If End With End If End If Next oRng With Range(TAISYOUHANNI) If Evaluate("PHONETIC(" & TAISYOUHANNI & ")") = "" Then .Borders(xlDiagonalUp).LineStyle = xlContinuous Else .Borders(xlDiagonalUp).LineStyle = xlNone End If End With End Sub
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 #条件付書式で出来るようにしてくれればいいのにねぇ。 #なんで囲みだけにしか対応してないいんだろー。 書いてみたので試してみてください。 「全セル」、 「単一ではないセル範囲」、 「複数領域を持つセル範囲」、 「【結合セル1-10】を内包するセル範囲」、 について、 「値入力」 「値消去」 した場合について、一応の動作確認はしましたが、 まだ漏れはあるかもしれませんがメンテはお任せします。 契機にする対象範囲を、定数 TAISYOUHANNI で文字列指定するようにしました。 処理対象範囲は .Offset(1).MergeArea にしましたので、 MergeArea の列数には依存せず、変更も比較的簡単かと思います。 契機にする対象は MergeArea の一番左のセルだけです。 ちょっと工夫すれば MergeArea の行数に依存しないようにもできるでしょう。 Private Sub Worksheet_Change(ByVal Target As Range) Const TAISYOUHANNI = "A4:AN4" If Intersect(Range(TAISYOUHANNI), Target) Is Nothing Then Exit Sub Dim oRng As Range For Each oRng In Intersect(Range(TAISYOUHANNI), Target) If oRng.MergeCells Then If oRng.MergeArea.Column = oRng.Column Then With oRng.Offset(1).MergeArea If oRng.Value = "" Then .Borders(xlDiagonalUp).LineStyle = xlContinuous Else .Borders(xlDiagonalUp).LineStyle = xlNone End If End With End If End If Next End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
質問を誤解しているかもしれませんが、以下のようなことでしょうか? 4行目は1行4列で結合したセルが右に10個(AN列まで)並んでいる。 5から8行目は4行4列で結合したセルが右に10個(AN列まで)並んでいる。 5から8行目の結合セルは、その上の4行目の結合セルを参照する式が入っている。 4行目が空白ならその下の結合セルには何も表示されない。(="" となる) 4行目の空白セルと下の何も表示されない結合セルすべてに斜線を自動的に表示させたい。 以下を試してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Range, myRng As Range Set myRng = Range("A4:AN8") If Intersect(Target, myRng) Is Nothing Then Exit Sub For Each i In myRng If i.MergeArea(1).Text = "" Then i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlContinuous Else i.MergeArea.Borders(xlDiagonalUp).LineStyle = xlNone End If Next i End Sub
補足
merlionXXさん、回答いただきありがとうございます。 >質問を誤解しているかもしれませんが、以下のようなことでしょうか? ⇒merlionXXさんの認識であっております。 >以下を試してみてください。 ⇒merlionXXさんの添付画像のような結果になりませんでした。 空白セル時を参照しても、空白で無いセルを参照しても、 斜線は引かれずそのままでした。 色々試してみましたが、やはりmerlionXXさんの添付画像のような結果になりませんでした。 僕なりに原因を引き続き調べてみますが、もし原因がわかりましたら、 教示いただけると助かります。
関連するQ&A
- 最終行の空白セルに右上がり斜線を引く
B列を検索して最終行を選び、C列~G列の中から空白セルを探して、右上がり斜線を引く。 Cells(Rows.Count, 2).End(xlUp).Offset(, 1).Resize(, 5). _ Borders(xlDiagonalUp).LineStyle = xlContinuous データーの入っているセルにも、斜線が引かれてしまいます。 空白セル(変動します)にのみ、斜線を引くことができるようにしたいのです。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- エクセルVBA 条件判断(斜線)
エクセル VBAにて If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle.xlContinuous = Value Then wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Borders(xlDiagonalUp).LineStyle = xlContinuous Else wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Value = MasterData(masteridx, 14) wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Font.Bold = True wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Font.Size = 22 End If 以上のようにマスタシート対象品の選択セルが斜線だったら 生産日報シート対象品の選択セルに斜線を記入するようにしたいのですが、If MasterData(masteridx, 14).Borders(xlDiagonalUp).LineStyle.xlContinuous = Value Then wb.Sheets(Seisannippou & CStr(SHeetNumber)).Range("T12").Borders(xlDiagonalUp).LineStyle = xlContinuous の書き込み方(マスタシートの斜線判断)がわかりません。 どのように書き込むのでしょうか?
- 締切済み
- オフィス系ソフト
- 一気にセルの結合できますか?
お世話になります。 エクセル2000を使用しています。 例えば、A列は空欄でB列に文字が入っているとします。(10行目まで) 今、A列とB列を結合してB列に入っていた文字を一つのセルにしたいのですが、 1行目から10行目まで10回やらなければなりませんか? 一気に1行目から10行目までをそれぞれの行でセルの結合はできますか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 空白前の1つ左のセルに合わせる
セル範囲を設定したいのですがどうすればいいのか教えてください。 C D E F G H I 17 品目 4月 5月 6月 7月 結果 18 No.1 りんご 200 50 23 52 325 19 No.1 もも 20 1 53 1 75 20 No.1 いちご 23 3 26 21 No.1 なし 1 52 53 22 No.1 バナナ 5 2 7 23 結果 226 126 76 58 486 上記のような表があります。 C18からH列の7月の最後の結果表までの範囲 C18:H23 を範囲指定をしたいのです。 しかし行も増える事があり、列も8月・9月と増えて行きます。 途中まではマクロを作成できたのですが、 列の最後の取り方がわかりません。 できれば「結果」という文字の手前での列で 最終行までの範囲を取るにはどうすればいいですか? Range("$C$18" & Range("C65536").End(xlUp).Row).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Copy
- ベストアンサー
- その他([技術者向] コンピューター)
- エクセルVBA 行列の数を指定して罫線を引くマクロ教えてください
下のようにSheet1に罫線を引く「開始セル(左右端)」「行」「列」が書いてあります。 この条件で罫線をSheet2に引くようにしたいのですが、変数の設定の仕方などが分かっていないようで、できません。教えていただけないでしょうか。マクロの記録をとったところ、下のようになりました。よろしくお願いします。 開始セル Sheet2!A1・・・Sheet1のB1セル 行 8・・・Sheet1のB2セル 列 2・・・Sheet1のB3セル Sub borders() Range("A1:B8").Select Selection.borders(xlDiagonalDown).LineStyle = xlNone Selection.borders(xlDiagonalUp).LineStyle = xlNone With Selection.borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルVBAでセル結合
いつもお世話になっています。 エクセル2003でVBAを使って下記をしたいのでその、VBA構文を教えて下さい。 特定の列のあるセルに文字が入っています。 (文字が入っている列は固定ですが、行番号はデータによって変わります。例えば、Aデータの場合は「J30」、Bデータの場合は、「J55」だったりします。) この文字が入っているセルをVBAで検索し、検索したセルを右隣のセルと結合します。(先ほどのAデータの場合、J30:Z30に結合します。) 更に、文字が入っているセルが2以上の複数の場合があります。(先ほどのAデータの場合、「J30」と「J40」と「J45」という感じです。文字が入っているセルの数はデータにより異なります。) 結合が終わり、このシートのデータがあるところだけに罫線を引きます。(このシートのデータというのは、前述の文字とそれ以外は、「数字」と「・」です。 ややこしいですが、よろしくお願いします。
- 締切済み
- オフィス系ソフト
- セルの値によって隣のセルに斜線を自動で引く方法
エクセル2007ですが、あるセルに数値を入力するのですが、その数値が0、または、空欄だった場合、そのセルの右隣の2セルに右上りの斜線を自動的に引かれる設定にしたいのですが、条件付き書式だと斜線が選べず困っております。 マクロやVBEでも結構ですが、何かいい方法があれば教えて頂けますか?
- ベストアンサー
- Excel(エクセル)
- Excelのセルに斜線を引くマクロ
Excel2007を使用しています。 画像のように,「印刷」シートと「データ」シートがあります。 画像のように,「印刷」シートのAO112~BZ112のセルを結合しています。 そのセルには,VLOOKUP関数で,「データ」シート10列目のデータを返すようにしています。 関数を見てもらえば分かるとおり, もし10列目にデータがなければ(VLOOKUPで値が0なら)””(空白)を返すようにしています。 以上のようなシートで,このセルにデータが無い場合, 画像のAO113~BZ113のように右上がりの斜線を引きたいのです。 もちろん,データが入っている場合は,斜線は消します。 マクロに関しては,まだまだ初心者のため, ほとんど分からないので,分かりやすく教えていただけませんでしょうか? お願いします。
- ベストアンサー
- オフィス系ソフト
- Excel2013のVBA最終行取得結合表複数あり
いつもお世話になってます。表複数 Excel2013のVBAで質問です。 A1,A2セルは空欄です。そして、A3:A4は結合されています。その後、A5:A10、A11:A15・・・と結合セルが続いています。そして、A95:A100まで結合セルが続いているとして、A101は合計欄のような単体のセルになっています。 その下は、空白セルが10セル位続いており、またその下にも、上と同じような表があります。 結合セルには、何らかの値が入力されています。最終行のA101には入力されていません。 このようなシートの、上側の表の最終行にあたるA101を取得したいと思っているのですが、下の表の最終行は取得するのですが、上からいくと結合セルがあり思うように取得できないでいます。 何か方法があるでしょうか?
- ベストアンサー
- Excel(エクセル)
- Excel VBAで結合セルに連番を振っていくには?
Microsoft Excel 2003での質問です。 表を作成しました。 結合セルが複数ある1列に(セル数はまちまち・複数の列には非結合)、連番を振っていく作業をしています。 これをVBAを使って自動化したいのです。 列に連番がすでに入力されている最終行の下のセル(つまりこれから連番が入る空白セル)を選択、 範囲指定し(セル数はまちまちなのでこれは手作業)、 セルを結合させるまではできたのですが、 この結合させたセルに、[(一つ上の結合セル)+(1)]の値を入力させるにはどうプログラムしたらよいでしょうか? わかりにくい説明で恐縮ですが、どなたかご教示ください。
- ベストアンサー
- オフィス系ソフト
お礼
merlionXXさん、フォローありがとうございます。 僕は「ThisWorkbook」に書いておりました。 merlionXXさんが教えてくれたとおり「sheet1」に書くことで無事に対応できました。 画像で示していただき、初心者の僕でも理解し易かったです。 merlionXXさんありがとうございました。