Excel VBA質問箱 IV

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

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


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

【82452】Re:複数のExcelに関数いれて集計したい
お礼  さかな  - 25/1/31(金) 18:02 -

引用なし
パスワード
   ▼マナ さん:
>▼さかな さん:
>
>
>Power Queryを使うことを推奨します


ご確認ありがとうございます
パワークエリは触ったことなかったので、やりたい事が実現できるか確認してみます!
・ツリー全体表示

【82451】Re:複数のExcelに関数いれて集計したい
発言  マナ  - 25/1/28(火) 18:15 -

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


Power Queryを使うことを推奨します
・ツリー全体表示

【82450】Re:複数のExcelに関数いれて集計したい
回答  さかな  - 25/1/28(火) 16:50 -

引用なし
パスワード
   ▼マナ さん:
>▼さかな さん:
>
>>4、各列の合計値を別のExcelに一覧として記載したい
>
>一覧というのがイメージできません。
>レイアウトがわかるように例示できませんか。


一覧とは、以下みたいにExcel内で集計したデータをまとめた
表というイメージです

フォルダ内
CSVファイル1 関数いれて集計
CSVファイル2 関数いれて集計
CSVファイル3 関数いれて集計
CSVファイル4 関数いれて集計


別のExcel(上記のCSVファイルに関数いれて集計した数値をまとめる表)
※どのCSVがどんな内容だったかを一目でみたく一覧化したい要望です

「CSVデータ1のファイル名)」 CSVに関数いれて集計した数値(Q列合計・R列合計・S列合計)
「CSVデータ2のファイル名)」 CSVに関数いれて集計した数値(Q列合計・R列合計・S列合計)
「CSVデータ3のファイル名)」 CSVに関数いれて集計した数値(Q列合計・R列合計・S列合計)
「CSVデータ4のファイル名)」 CSVに関数いれて集計した数値(Q列合計・R列合計・S列合計)
・ツリー全体表示

【82449】Re:複数のExcelに関数いれて集計したい
発言  マナ  - 25/1/28(火) 13:15 -

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

>4、各列の合計値を別のExcelに一覧として記載したい

一覧というのがイメージできません。
レイアウトがわかるように例示できませんか。
・ツリー全体表示

【82448】複数のExcelに関数いれて集計したい
質問  さかな  - 25/1/28(火) 12:04 -

引用なし
パスワード
   VBAについて詳しくないのですが、以下がVBAで実現できないかなと思い相談させて頂きたいです

------------------------------------
当方のレベル:かなり初心者(コード等は自分でつくれないレベル)
------------------------------------
要望
・概要+背景
 複数の形式が同じのCSVのデータを集計する為に
 現状、200くらいあるCSVファイルを1つ1つ開いて、
 指定の関数を入れて集計された数値の合計を手作業で一覧表に転記していっています
 RPAも検討しましたが、費用が高額で断念しました、、、
 VBAで実現できないか、アドバイス頂きたいです、、


・詳細
1、1つのフォルダ内にファイル名の違う複数CSVファイルあり(200ファイルくらい)
2、CSVの形式(列・項目)は同じですが、CSVによって行数が異なります
3、CSV内に以下の指定のセルに関数を入れ込む
  セルQ2…=IF(AND(B2="IP間呼",H2="IP(有料)"),L2,"0")
  セルR2…=IF(B2="IP間呼","0",L2)
  セルS2…=IF(B2="IP間呼",L2,"0")
  ※行数が複数あるので、関数いれた後に最終行までオートフィルしたい
4、各列の合計値を別のExcelに一覧として記載したい
・ツリー全体表示

【82447】Re:エクセル シートを増やすと VBA の速...
発言  westwindow  - 25/1/27(月) 12:46 -

引用なし
パスワード
   ▼ふぇふぇ さん:
>シートをコピーしてあるけど名前定義もそのままですよね?
>それと、いちいちセルを選択するだけでも遅くなる
>数式の使用は?
>とまあ、なんとなくそう感じました
>では

ご指摘ありがとうございます。
・ツリー全体表示

【82446】Re:エクセル シートを増やすと VBA の速...
発言  ふぇふぇ  - 25/1/27(月) 9:41 -

引用なし
パスワード
   シートをコピーしてあるけど名前定義もそのままですよね?
それと、いちいちセルを選択するだけでも遅くなる
数式の使用は?
とまあ、なんとなくそう感じました
では
・ツリー全体表示

【82445】Re:エクセル シートを増やすと VBA の速...
発言  westwindow  - 25/1/27(月) 1:34 -

引用なし
パスワード
   ▼マナ さん:
>▼westwindow さん:
>
>シート1つの場合と2つの場合で
>どのステップで時間に違いがでるか
>調べてみてがいかがでしょうか。

ご指摘ありがとうございます。
・ツリー全体表示

【82444】Re:複数の指定された項目を転記したい
発言  マナ  - 25/1/26(日) 22:24 -

引用なし
パスワード
   ▼初心者です。 さん:

コピペを繰り返すほうが、簡単でしたね。

Sub test2()
  Dim wsFrom As Worksheet, wsTo As Worksheet
  Dim rngFrom As Range, rngTo As Range
  Dim c As Range
  Dim m
  
  Set wsFrom = Worksheets("A")
  Set rngFrom = wsFrom.Cells(1).CurrentRegion
  Set rngFrom = Intersect(rngFrom, rngFrom.Offset(1))

  
  Set wsTo = Worksheets("B")
  wsTo.UsedRange.Offset(1).ClearContents
  Set rngTo = wsTo.Cells(1).CurrentRegion
  
  For Each c In rngTo
    m = Application.XMatch(c, rngFrom.Rows(0))
    If IsNumeric(m) Then
      rngFrom.Columns(m).Copy
      c.Offset(1).PasteSpecial xlPasteValues
    End If
  Next
  Application.CutCopyMode = False
  
  rngTo.CurrentRegion.Columns(1).SpecialCells(xlCellTypeBlanks).Value _
    = Application.Sequence(rngFrom.Rows.Count)
   
End Sub
・ツリー全体表示

【82443】Re:複数の指定された項目を転記したい
発言  マナ  - 25/1/26(日) 21:34 -

引用なし
パスワード
   ▼初心者です。 さん:

>ただ、貼り付けのBシートは、B列から項目があり、
>A列には貼り付けたデータのナンバリングが入ります。

ナンバリングの意味がわかりませんが?


Sub test()
  Dim wsFrom As Worksheet, wsTo As Worksheet
  Dim rngFrom As Range, rngTo As Range
  Dim app As Application
  Dim v, k, m
  Dim n As Long
  
  Set wsFrom = Worksheets("A")
  Set rngFrom = wsFrom.Cells(1).CurrentRegion
  Set rngFrom = Intersect(rngFrom, rngFrom.Offset(1))
  v = rngFrom.Resize(, rngFrom.Columns.Count + 1).Value
  
  Set wsTo = Worksheets("B")
  wsTo.UsedRange.Offset(1).ClearContents
  Set rngTo = wsTo.Cells(1).CurrentRegion
  
  Set app = Application
      
  m = app.XMatch(rngTo.Value, rngFrom.Rows(0))
  m = app.IfError(m, UBound(v, 2))
  n = UBound(v, 1)
  
  v = app.Index(v, app.Sequence(n), m)
 
  Set rngTo = rngTo.Rows(2).Resize(n)
  rngTo.Value = v
  rngTo.Columns(1) = app.Sequence(n)
   
End Sub
・ツリー全体表示

【82442】Re:エクセル シートを増やすと VBA の速...
発言  マナ  - 25/1/26(日) 21:11 -

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

シート1つの場合と2つの場合で
どのステップで時間に違いがでるか
調べてみてがいかがでしょうか。
・ツリー全体表示

【82441】Re:エクセル シートを増やすと VBA の速...
発言  westwindow  - 25/1/26(日) 19:45 -

引用なし
パスワード
   ▼マナ さん:
>▼westwindow さん:
>
>>速度アップの対応を行っています。それでもシートを増やすとその現象は起こります。
>
>速度アップの対応とはリンク先の方法でしょうか。
>提示いただいたコードに記述がないので、念のため確認しています。

申し訳ありません。
表示しているコードは表示の上限1000文字を超えるためかなりカットしています。

表示させない処理、イベント発生させない処理は行っています。計算処理をさせない処理も試しましたが殆ど効果がなかったので使用していません。
・ツリー全体表示

【82440】Re:複数の指定された項目を転記したい
回答  初心者です。  - 25/1/26(日) 10:13 -

引用なし
パスワード
   ▼マナ さん:
>▼初心者です。 さん:
>
>>Aのシートの項目は、列番号不規則で抽出されるため、
>>『名前の項目は、B列』と確定していない
>
>
>AシートのデータはA列からで間違いないですか。
はい!間違いないです。
ただ、貼り付けのBシートは、B列から項目があり、A列には貼り付けたデータのナンバリングが入ります。

>転記したい項目がAシートにないこともありえますか。
そうなんです。Aシートのデータはシステムから抽出されたもので、ない可能性もあります。
複雑で申し訳ございませんm(_ _)m
・ツリー全体表示

【82439】Re:エクセル シートを増やすと VBA の速...
発言  マナ  - 25/1/25(土) 22:20 -

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

>速度アップの対応を行っています。それでもシートを増やすとその現象は起こります。

速度アップの対応とはリンク先の方法でしょうか。
提示いただいたコードに記述がないので、念のため確認しています。
・ツリー全体表示

【82438】Re:エクセル シートを増やすと VBA の速...
発言  westwindow  - 25/1/25(土) 4:46 -

引用なし
パスワード
   ▼マナ さん:
>▼westwindow さん:
>
>この辺りは検討済みですか
>ht tps://pcfunabashi.com/pcf-salon-VBAkousokuka1.html

速度アップの対応を行っています。それでもシートを増やすとその現象は起こります。
・ツリー全体表示

【82437】Re:エクセル シートを増やすと VBA の速...
発言  マナ  - 25/1/24(金) 22:00 -

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

この辺りは検討済みですか
ht tps://pcfunabashi.com/pcf-salon-VBAkousokuka1.html
・ツリー全体表示

【82436】Re:複数の指定された項目を転記したい
発言  マナ  - 25/1/24(金) 21:36 -

引用なし
パスワード
   ▼初心者です。 さん:

>Aのシートの項目は、列番号不規則で抽出されるため、
>『名前の項目は、B列』と確定していない


AシートのデータはA列からで間違いないですか。
転記したい項目がAシートにないこともありえますか。
・ツリー全体表示

【82435】Re:エクセル シートを増やすと VBA の速...
発言  westwindow  - 25/1/24(金) 17:59 -

引用なし
パスワード
   ▼マナ さん:
>▼westwindow さん:
>
>>1分かかる処理があるとして
>
>
>どんな処理ですか。コードを提示できませんか。
勤務表自動作成の処理の夜勤入力の部分です。宜しくお願い致します。


Sub 夜勤総合入力3()  '山登り法による入力

   Range("本館全て").Select
   y1 = Selection(1).Row         '選択範囲の左上の行位置
   y2 = Selection(Selection.Count).Row  '選択範囲の右下の行の位置
   x1 = Selection(1).Column         '選択範囲の左上の列位置
   x2 = Selection(Selection.Count).Column   '選択範囲の右下の列の位置
   x4 = Range("勤務表左上").Column - 1 + Day(Range("月末日")) '月末列番号


   For x = x1 To x2
      Call 山登り法夜勤(x)
   Next x


End Sub


Sub 山登り法夜勤(x11) '列指定


  Dim 評価値1 As Single
  Dim 評価値2 As Single

  Dim a
  Dim b


   Randomize

      Randomize
    Range("ガレージ範囲").Select
   yg1 = Selection(1).Row         '選択範囲の左上の行位置
   yg2 = Selection(Selection.Count).Row  '選択範囲の右下の行の位置


    Range("職員と夜勤ガレージ").Select
   y11 = Selection(1).Row         '選択範囲の左上の行位置
   y22 = Selection(Selection.Count).Row  '選択範囲の右下の行の位置


   y60 = Range("ビット変数夜勤").Row   'チェックランの位置
   x60 = Range("ビット変数夜勤").Column

   y70 = Range("夜上限回数").Row   'チェックランの位置
   x70 = Range("夜上限回数").Column

   y80 = Range("夜総数").Row   'チェックランの位置
   x80 = Range("夜総数").Column


  For i = 1 To 2000               '★★理想数は不明


'skip1:

     判定 = 0 '初期化する

      '初期セルを決める
     x1 = x11
     y1 = WorksheetFunction.RandBetween(y11, y22)

     x2 = x11
     y2 = WorksheetFunction.RandBetween(y11, y22)

     a = Cells(y1, x11)
     b = Cells(y2, x11)

     a_1 = Cells(y1, x11 + 1)
     a_2 = Cells(y1, x11 + 2)

     b_1 = Cells(y2, x11 + 1)
     b_2 = Cells(y2, x11 + 2)


        '-------ビット変数を用意する------

         If a = "夜ほ" Then
          a_bit = "100"
         End If
         If a = "夜鳥" Then
          a_bit = "010"
         End If
         If a = "夜花虹" Then
          a_bit = "001"
         End If
         If a = "" Then
          a_bit = "000"
         End If


         If b = "夜ほ" Then
          b_bit = "100"
         End If
         If b = "夜鳥" Then
          b_bit = "010"
         End If
         If b = "夜花虹" Then
          b_bit = "001"
         End If
         If b = "" Then
          b_bit = "000"
         End If

        ' ----------------交換できるか調べる

         aa =
WorksheetFunction.Dec2Bin(WorksheetFunction.Bitand(WorksheetFunction.Bin2Dec
(Cells(y1, x60)), WorksheetFunction.Bin2Dec(b_bit)), 3)
         bb =
WorksheetFunction.Dec2Bin(WorksheetFunction.Bitand(WorksheetFunction.Bin2Dec
(Cells(y2, x60)), WorksheetFunction.Bin2Dec(a_bit)), 3)
         If a_bit = "000" Then     '交換元が空白の時は、どこで
も交換できる
          bb = "111"
         End If
         If b_bit = "000" Then
          aa = "111"
         End If
         If aa = "000" Or bb = "000" Then     '交換できないな
らば戻る
            GoTo skip1
         End If


        '--------評価値1 -------------

         評価値1 = 夜勤総合評価(x11)

         If 評価値1 = 0 Then                  '評価
1が0なら終了
          Exit Sub
         End If


        '----------交換------------
         Cells(y1, x1) = b
         Cells(y2, x1) = a


        '--------評価値2 -------------

        評価値2 = 夜勤総合評価(x11)

        '------------------------------------
         If Cells(y1, x80) > Cells(y1, x70) Or Cells(y2, x80) >
Cells(y2, x70) Then  '上限数をこえていたら元に戻す

          Cells(y1, x1) = a
          Cells(y2, x1) = b
         End If


         If 評価値2 = 0 Then  '評価が0なら終了


           Exit Sub
         End If


         If 評価値2 < 評価値1 Then '評価が悪いと元に戻す


          Cells(y1, x1) = a
          Cells(y2, x1) = b
         End If

skip1:


  Next i

End Sub
・ツリー全体表示

【82434】Re:複数の指定された項目を転記したい
回答  初心者です。  - 25/1/24(金) 17:53 -

引用なし
パスワード
   ▼マナ さん:
>▼初心者です。 さん:
>
>>Aシート(元データ)
>>1行目(A列〜AA列):項目   &#8701; 名前、電話、住所、県、市 
>
>>Bシート(抽出先)
>>1行目(A列〜Z列):項目 &#8701; 住所、県、電話、県  
>
>Bシートの見出しに、県が2つありますが、間違いですか?

間違いです。大変失礼致しました。
同じシート内は項目が重複することはないです。

Aのシートの項目は、列番号不規則で抽出されるため、『名前の項目は、B列』と確定して
いないため、指定の項目の列を検索して、項目から下のデータだけBシートへ抽出(コピー)したいです。


説明が下手で申し訳ございません。
お力をお借り出来ればと思います。よろしくお願いします。
・ツリー全体表示

【82433】Re:複数の指定された項目を転記したい
発言  マナ  - 25/1/24(金) 8:26 -

引用なし
パスワード
   ▼初心者です。 さん:

>Aシート(元データ)
>1行目(A列〜AA列):項目   &#8701; 名前、電話、住所、県、市 

>Bシート(抽出先)
>1行目(A列〜Z列):項目 &#8701; 住所、県、電話、県  

Bシートの見出しに、県が2つありますが、間違いですか?
・ツリー全体表示

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