Excel VBA質問箱 IV

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

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


20 / 3841 ページ ←次へ | 前へ→

【82088】2つのシートのデータをまとめる作業
質問  ace  - 22/11/7(月) 13:40 -

引用なし
パスワード
   見出、詳細の2つのシートがあり、
今までは手作業で、見出Sheetの(年度)、(No.)で並べ替え、
詳細Sheetの(年度)、(No.)、(SEQ)で並べ替えてから
コピペで⇒「あ , い , う , え」や「あ(A),い(B),う(R),え(W)」を作成していました

毎月、300〜400行くらいやっていましたが、もしVBAで可能であれは助かります
宜しくお願い致します
※詳細SheetのSEQは1〜N個の任意で1個の時もあれば30個くらいの時もあります
※項目、結果は共に文字列です

(見出Sheet)                
   B列     C列    E列   F列
1行 依頼者No.  現場No.  年度   No.
2行 12345    1     2022   6789
3行 12345    2     2022   6790
4行 12345    3     2022   6791
5行 23456    1     2022   6792
6行 34567    1     2022   6793


(詳細Sheet)                            
   B列    C列   E列   F列    G列 M列  N列
1行 依頼者No. 現場No. 年度   No.    SEQ 項目 結果
2行 12345   1    2022   6789   1  あ  A
3行 12345   1    2022   6789   2  い  B
4行 12345   1    2022   6789   3  う  R
5行 12345   1    2022   6789   4  え  W
6行 12345   2    2022   6790   1  た  C
7行 12345   2    2022   6790   2  ち  D
8行 12345   3    2022   6791   1  つ  F
9行 23456   1    2022   6792   1  あ  G
10行 34567   1    2022   6793   1  あ  S


(見出Sheet)最終表示                        
   B列    C列   E列   F列  AA列        AB列
1行 依頼者No. 現場No. 年度  No.  項目        項目+結果
2行 12345   1    2022  6789  あ , い , う , え あ(A),い(B),う(R),え(W)
3行 12345   2    2022   6790  た , ち      た(C),ち(D)
4行 12345   3    2022   6791  つ         つ(F)
5行 23456   1    2022   6792  あ         あ(G)
6行 34567   1    2022   6793  あ         あ(S)


わかりずらい表ですみません
・ツリー全体表示

【82087】Excelのデータをスプレッドシートに転記
質問  TOM  - 22/11/4(金) 22:36 -

引用なし
パスワード
   ExcelのVBAを使って、Excelのデータをスプレッドシートの所定のセルに転記する事はそもそも可能なのでしょうか?

色々と調べてみたんですが、そのような事が出来る記事らしきものが見当たらなにので、出来ないのかな?と思った次第です。

イメージとしてはスプレッドシートのIDかなにかをVBAに書けば出来ると思っていたのですが、無理でしょうか?
・ツリー全体表示

【82086】Re:VBA メール作成
発言  MK  - 22/10/25(火) 17:11 -

引用なし
パスワード
   >名前が長い店名

これはメール内容のことだろうか?
タイトルのことだろうか?
メールアドレスのことだろうか?
・ツリー全体表示

【82085】VBA メール作成
質問  はら  - 22/10/18(火) 11:44 -

引用なし
パスワード
   名前が長い店名でメール作成を行おうとするとメール作成ができない状況です。
考えられる原因はなんでしょうか。
よろしくお願いします。
・ツリー全体表示

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

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

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

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

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

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

【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
・ツリー全体表示

【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の結合は解除できると思います。
・ツリー全体表示

【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と結合されたセルとなっています。
・ツリー全体表示

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

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

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

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

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

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

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

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

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

Public rng As Range
Public selectRng As Range
Public iC As Integer
Public iR As Integer
・ツリー全体表示

【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
・ツリー全体表示

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

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

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

それを提示してください。
・ツリー全体表示

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

引用なし
パスワード
   >(C1)作業者の入力ミスで物件番号の入ったセルの着色を消している。→ユニット数にはカウントされない。
>(C2)日の始まりの着色セルに物件番号を設定していない。→作業番号不明。

物件番号→作業番号と読み換えてください。
・ツリー全体表示

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

引用なし
パスワード
   建設業です。
毎月の作業内容毎のユニット(1ユニット=15分)を計算しています。
引き継がれている書式があり、その体裁は崩したくありません。

(A)入力セルについて
(A1)Sheets("月間ユニット集計")のRange("R18:DI41")に縦方向に31日、横方向に24時間(15分毎)に区切った月表があります。
(A2)月表は時間区分(定時間、時間外、深夜時間、休日、法定休日等々)にセル毎に色分けされています。
(A3)作業者は毎日当日の作業番号(6桁数値)をその作業の開始時間のセルに入力します。
(A4)1日の中で異なる作業が発生し、その都度作業番号を開始時間のセルに入力します。
(A5)作業が発生していない時間(昼休み、会議、出張等)は当該時間内のセルの色を無色にします。

(B)集計セルについて
(B1)Sheets("ユニット集計")のRange("A50:A69")に作業番号、Range("H50:N69")に時間区分が設定されています。
(B2)月の作業番号毎、時間区分毎のユニット数を月末に集計、入力します。

(C)留意すること
(C1)作業者の入力ミスで物件番号の入ったセルの着色を消している。→ユニット数にはカウントされない。
(C2)日の始まりの着色セルに物件番号を設定していない。→作業番号不明。
(C3)次の作業番号までの間のセルに無着色セルがある場合(A5)も次のセルが着色セル&空白なら続いて同じ作業番号のユニットとしてカウントする。

(D)VBAでしたいこと
(D1)(B2)の集計、入力を自動、かつ短時間で処理したい。
(D2)(C1)、(C2)の入力設定忘れをメッセージ表示したい。

(E)試したこと
作業番号が入力されたセルの作業番号を、異なる作業番号が入力されているセルまでコピペし、
セルの色毎にそれを集計。集計後同じ作業番号が続くセルをClearContents。
→処理時間が永遠かと思われるほどかかりました。

どなたかお知恵を貸してくれる方、いらっしゃいましたら宜しくお願いします。
・ツリー全体表示

【82072】Re:テーブルをやめる
お礼  りった  - 22/9/28(水) 22:17 -

引用なし
パスワード
   ありがとうございます!!
遅レスすみません m(_ _)m
・ツリー全体表示

【82071】Re:ユーザー関数(引数・戻り値とも配列)...
発言  ヘビー  - 22/9/23(金) 19:05 -

引用なし
パスワード
   変数名
C1,R1に似た物はPCによっては撥ねられます。
でもその内エラーにならなくなります。
ここが摩訶不思議。

Sub R()
a=0
End Sub

Sub C()
a=0
End Sub

Sub R1()
a=0
End Sub

Sub C1()
a=0
End Sub

なども、マクロマクロに表示され無い場合も。
でもその内表示されるようになります。
ここも摩訶不思議。
RとCは予約後らしい。
・ツリー全体表示

【82070】Re:ユーザー関数(引数・戻り値とも配列)...
発言  マナ  - 22/9/10(土) 10:26 -

引用なし
パスワード
   >p = Application.Transpose(Application.Transpose(p))

TypeName(p)="Range" のときだけでよかったかもしれません。
・ツリー全体表示

【82069】Re:ユーザー関数(引数・戻り値とも配列)...
発言  マナ  - 22/9/10(土) 10:16 -

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

>再現できました。C1#が不可は不思議

これも、よくわかりませんが、エラーにはなりませんでした。

Public Function Pu(p As Variant) As Long()  '配列&Range受取・配列戻り
  p = Application.Transpose(Application.Transpose(p))
  Dim ret() As Long: ReDim ret(1 To UBound(p))
  ret(1) = p(1) + p(1) '和
  ret(2) = p(1) - p(2) '差
  Pu = ret
End Function
・ツリー全体表示

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