• ベストアンサー

マクロ エクセル 結合セルのカウント

エクセルのマクロについて教えてください。 結合されたセルに数字が入っていたらそれの数をカウントし、その数の部数の印刷する方法を教えていただけないでしょうか。 sheet1のB12:E17に結合セルが6個、M12:M17に結合セルが6個あります。 この12個の結合セルの中に数字が入っている結合セルの数の部数をsheet1の印刷枚数として印刷するようにしたいです。 よろしくお願いします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.5

> 結合されたセルに数字が入っていたらそれの数をカウントし > この12個の結合セルの中に数字が入っている結合セルの数の部数 質問の画像で結合セルに「5」とあるのですが、5部なのか、一カ所なので1部なのかよくわかりませんが 結合セルは結合分の左上のセルに値が入っています。ロットNoの結合セルで左のB:EはB列に右のM:P列にデータが入っています。 Sub Test() Dim num As Long ' B12:B17,M12:M17の数値を合計した分の部数を印刷する num = WorksheetFunction.Sum(Range("B12:B17,M12:M17")) ' B12:B17,M12:M17の数値データの個数分の部数を印刷する num = WorksheetFunction.Count(Range("B12:B17,M12:M17")) Worksheets("Sheet1").PrintOut copies:=num, Preview:=True End Sub

RT123456789
質問者

お礼

kkkkkmさん うまくいきました。 ありがとうございます。 説明足らずに申し訳ありません。数値データの個数分印刷することでした。 ありがとうございました。

その他の回答 (6)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.7

回答№3,4です >結合されたセルに数字が入っていたらそれの数をカウントし、 ★数値のセルの個数の計算です(文字列のセルは対象外)  結合されたセルは1個となります。  結合されたアドレスは左端のアドレスです。念の為

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.6

No.5の訂正 右のM:P列にデータが入っています。 ↓ 右のM:P列はM列にデータが入っています。

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.4

回答№3です セルD18の式を  =COUNT(E11:E16,P11:P16) と訂正します

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.3

>エクセルのマクロについて教えてください。  結合されたセルに数字が入っていたらそれの数をカウントし、 ★その通り、部数の計算は〈カウント関数〉を使います  印刷はマクロでは処理を出来ないようです  添付のようにセルD18に式〈=COUNT(B12:B17)+COUNT(M12:M17)〉で求めます

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

・エクセルVBAで処理することを望んでいるとする。総合的に費やす時間は目視の方が早いと思うが。 ・下記はテストしたデータ例が少数で、十分ではない。ご免。 ・本件は珍しい課題だと思う。WEB記事にも似た課題は探せなかった。見たこともない。 ・セル結合や個所数を出すのは、VBAでは適したもの(メソッド、プロパティ)がない。 ように思うが、本件には、手こずった。 ーーー https://vbabeginner.net/check-number-excluding-duplicates/ VBAで重複を除いた値の個数を調べる を参考に考えた。 Dictionaryは大げさなようで、使わなかった。 ーーー 結合セルのカタマリの場所の数(かつ、値が数)は下記コードを実行してだす。 あとは、印刷を行う時のVBA引数で渡すなりして使うことになろう。 残念ながら、いろいろ考えたがうまく行かず、Sheet2を作業シートとして、使わざるを得なかった。 後半でSubtotal関数の利用も苦心の末の工夫です。 ーー 下記Range("A1:Z100")の部分は、適当に広めに設定のこと。 標準モジュールに Sub test01() k = 2 'Sheet2の第1行目見出し、第2行目から For Each cl In Worksheets("Sheet1").Range("A1:Z100") '適当に広目にセル範囲を設定 If (cl.MergeCells = True) And (cl.Value <> "") And (IsNumeric(cl) = True) Then Worksheets("Sheet2").Cells(k, "A") = cl.MergeArea.Address k = k + 1 End If Next '-- MsgBox "End" 'ーーー Worksheets("Sheet2").Range("A1:A" & k).AdvancedFilter Action:=xlFilterInPlace, Unique:=True n = WorksheetFunction.Subtotal(3, Worksheets("Sheet2").Columns(1)) 'Subtotal関数の3は件数 n = n - 1 '見出し行除きの数 MsgBox n End Sub ---------- この n を印刷時のPrintOutメソッドのCopiesの件数に使ってはどうか。

回答No.1

=B12+B13+B14+B15+B16+B17+M12+M13+M14+M15+M16+M17 とすれば良いと思います。 分散してセルB19に「=B12+B13+B14+B15+B16+B17」 セルM19に「=M12+M13+M14+M15+M16+M17」 としておいて セルF22に「=B19+M19」としてもいけると思います。

関連するQ&A