Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


55 / 13620 ツリー ←次へ | 前へ→

【82073】色付きセル&数値入りセルの個数を数えたい へっぽこです 22/10/13(木) 8:40 質問[未読]

【82075】Re:色付きセル&数値入りセルの個数を数え... マナ 22/10/13(木) 14:17 発言[未読]
【82076】Re:色付きセル&数値入りセルの個数を数え... へっぽこです 22/10/14(金) 7:11 質問[未読]
【82077】Re:色付きセル&数値入りセルの個数を数え... へっぽこです 22/10/14(金) 8:08 発言[未読]
【82078】Re:色付きセル&数値入りセルの個数を数え... マナ 22/10/14(金) 17:11 発言[未読]
【82079】Re:色付きセル&数値入りセルの個数を数え... へっぽこです 22/10/14(金) 19:31 発言[未読]
【82080】Re:色付きセル&数値入りセルの個数を数え... へっぽこです 22/10/17(月) 8:26 発言[未読]
【82081】Re:色付きセル&数値入りセルの個数を数え... へっぽこです 22/10/17(月) 9:37 発言[未読]
【82082】Re:色付きセル&数値入りセルの個数を数え... マナ 22/10/17(月) 13:32 発言[未読]
【82083】Re:色付きセル&数値入りセルの個数を数え... へっぽこです 22/10/17(月) 21:15 お礼[未読]
【82084】Re:色付きセル&数値入りセルの個数を数え... へっぽこです 22/10/17(月) 21:19 お礼[未読]

【82075】Re:色付きセル&数値入りセルの個数を数...
発言  マナ  - 22/10/13(木) 14:17 -

引用なし
パスワード
   ▼へっぽこです さん:

>→処理時間が永遠かと思われるほどかかりました。

それを提示してください。

【82076】Re:色付きセル&数値入りセルの個数を数...
質問  へっぽこです  - 22/10/14(金) 7:11 -

引用なし
パスワード
   ▼マナ さん:

>それを提示してください。

色々編集して現在は下記の通り。
以前ほどには処理に時間がかからなくなった気がします。

ただ、
(1)とても泥臭い処理を行っている気がします。
(2)連続作業番号削除がどんな場面でも正確に処理されるのか、が気になっています。

もっとスマートな方法があればご教授ください。

Function CountCcolorText(range_data As Range, criteriaC As Range, criteriaT As Range) As Long '指定した色のセル数_and_指定した文字セルのカウント
Dim datax As Range
Dim xcolor As Long
Dim xtext As String

Application.Volatile
CountCcolorText = 0

xcolor = criteriaC.Interior.ColorIndex
xtext = criteriaT.Value

For Each datax In range_data
  If datax.Interior.ColorIndex = xcolor And datax.Value = xtext Then
   CountCcolorText = CountCcolorText + 1
  End If
Next datax
End Function


Sub 作業番号連続コピー()
  Sheets("月間ユニット集計").Activate
'***********************************************************************
'色の付いているセルだけを選択する
  For Each rng In Range("R11:DI41")
   If rng.Interior.ColorIndex <> xlNone Then 'セルに色が付いている場合
    If selectRng Is Nothing Then '最初にヒットした場合
     Set selectRng = rng
    Else
     Set selectRng = Application.Union(selectRng, rng) '色が付いているセルを選択範囲に追加していく
    End If
   End If
  Next rng
'***********************************************************************
'作業番号コピー
  For Each rng In selectRng '着色セル範囲内で
   If rng <> "" And rng.Offset(0, 1).Interior.ColorIndex <> xlNone And rng.Offset(0, 1) = "" Then 'セルに文字があり隣のセルが着色され,隣のセルが空欄の場合
    rng.Offset(0, 1).Value = rng
   ElseIf rng = "" And rng.Interior.ColorIndex <> xlNone Then 'セルに文字が無くセルが着色されている場合
    rng = rng.End(xlToLeft)
   End If

   If rng = Cells(rng.Row, "F") Or rng = Cells(rng.Row, "H") Or rng = Cells(rng.Row, "J") Or rng = Cells(rng.Row, "L") Or rng = Cells(rng.Row, "N") Or rng = Cells(rng.Row, "P") Then '列F,H,J,L,N,Pには別数値設定済
    rng.ClearContents
   End If
  Next rng
'***********************************************************************
'着色セルand数値セル集計
  For iR = 50 To 69
   If Cells(iR, 1) <> "" Then
    For iC = 6 To 14 Step 2
     Cells(iR, iC) = CountCcolorText(selectRng, Cells(48, iC), Cells(iR, 1)) 'セル(48, iC)には時間区分毎の設定色がせっていされています。
    Next iC
'無着色セルand数値セル集計
    Cells(iR, 16) = CountCcolorText(Range("R11:DI41"), Cells(48, 16), Cells(iR, 1)) 'セル(iR, 16)は作業番号有り、かつ無着色エラーの検出用。
   End If
  Next iR
End Sub

Sub 連続作業番号削除()
Application.ScreenUpdating = False
  Sheets("月間ユニット集計").Activate
   For iC = 113 To 18 Step -1
    For iR = 11 To 41
     If Cells(iR, iC) = Cells(iR, iC - 1) Then
      Cells(iR, iC).ClearContents
     End If
     If Cells(iR, iC) <> "" And Cells(iR, iC - 1) = "" And Cells(iR, iC) = Cells(iR, iC).End(xlToLeft) Then
      Cells(iR, iC).ClearContents
     End If
    Next iR
   Next iC
End Sub

【82077】Re:色付きセル&数値入りセルの個数を数...
発言  へっぽこです  - 22/10/14(金) 8:08 -

引用なし
パスワード
   記入漏れです。

Public rng As Range
Public selectRng As Range
Public iC As Integer
Public iR As Integer

【82078】Re:色付きセル&数値入りセルの個数を数...
発言  マナ  - 22/10/14(金) 17:11 -

引用なし
パスワード
   ▼へっぽこです さん:

集計結果を書き込む列(F,H,J,L,N,P)の
隣の列(G,I,K,M,O,Q)には、何があるのでしょうか?

【82079】Re:色付きセル&数値入りセルの個数を数...
発言  へっぽこです  - 22/10/14(金) 19:31 -

引用なし
パスワード
   ▼マナ さん:

>集計結果を書き込む列(F,H,J,L,N,P)の
>隣の列(G,I,K,M,O,Q)には、何があるのでしょうか?

個人PCから書き込んでいます。
すみません、明日明後日はテレワーク移動日のため月曜日に返信します。

【82080】Re:色付きセル&数値入りセルの個数を数...
発言  へっぽこです  - 22/10/17(月) 8:26 -

引用なし
パスワード
   ▼マナ さん:

>集計結果を書き込む列(F,H,J,L,N,P)の
>隣の列(G,I,K,M,O,Q)には、何があるのでしょうか?

Q列は全て空欄です。
G,I,K,M,Oは各々隣のF,H,J,L,Nと結合されたセルとなっています。

【82081】Re:色付きセル&数値入りセルの個数を数...
発言  へっぽこです  - 22/10/17(月) 9:37 -

引用なし
パスワード
   ▼マナ さん:

>G,I,K,M,Oは各々隣のF,H,J,L,Nと結合されたセルとなっています。

追伸です。
上記列G,I,K,M,OとF,H,J,L,Nの結合は解除できると思います。

【82082】Re:色付きセル&数値入りセルの個数を数...
発言  マナ  - 22/10/17(月) 13:32 -

引用なし
パスワード
   Sub test()
  Dim rngF As Range, rngT As Range
  Dim dicX As Object, dicY As Object
  Dim w, k As Long
  Dim r As Range, c As Range
  Dim 作業 As String, 区分
  
  Set rngF = Range("R11:DI41")
  Set rngT = Range("F50:P69")
  ReDim w(1 To rngT.Rows.Count, 1 To rngT.Columns.Count)
  
  Set dicX = CreateObject("scripting.dictionary")
  Set dicY = CreateObject("scripting.dictionary")
  
  For k = 1 To rngT.Rows.Count
    作業 = rngT(k, -4).Value
    If 作業 <> "" Then dicY(作業) = k
  Next
  
  For k = 1 To rngT.Columns.Count Step 2
    区分 = rngT(-1, k).Interior.ColorIndex
    dicX(区分) = k
  Next
    
  For Each r In rngF.Rows
    作業 = ""
    For Each c In r.Cells
      区分 = c.Interior.ColorIndex
      If Not dicX.exists(区分) Then 区分 = xlNone
      If c.Value <> "" Then 作業 = c.Value
      If Not dicY.exists(作業) Then
        If 区分 <> xlNone Or 作業 <> "" Then
          Application.Goto c, -1
          MsgBox c.Address(0, 0) & "セルの作業番号不明"
          Exit Sub
        End If
      End If
      If c.Value <> "" Or 区分 <> xlNone Then
        w(dicY(作業), dicX(区分)) = w(dicY(作業), dicX(区分)) + 1
      End If
    Next
  Next
  
  rngT.Value = w
  
End Sub

【82083】Re:色付きセル&数値入りセルの個数を数...
お礼  へっぽこです  - 22/10/17(月) 21:15 -

引用なし
パスワード
   ▼マナ さん:
おお、私の長々とした記述に比べ、ずいぶんコンパクトに!
今、走らせてみましたがスッキリ動きました。

ReDimというステートメントなど見たこともないので調べてみましたが、
勉強不足で理解できませんでした。

また明朝、作成していただいたコードを読み解いてみようと思います。
ありがとうございました!

【82084】Re:色付きセル&数値入りセルの個数を数...
お礼  へっぽこです  - 22/10/17(月) 21:19 -

引用なし
パスワード
   また不明な点があると思いますのでその時はご教示ください。

55 / 13620 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free