Excel VBA質問箱 IV

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

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


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

【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つありますが、間違いですか?
・ツリー全体表示

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

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

>1分かかる処理があるとして


どんな処理ですか。コードを提示できませんか。
・ツリー全体表示

【82431】複数の指定された項目を転記したい
質問  初心者です。  - 25/1/24(金) 0:31 -

引用なし
パスワード
   はじめまして。

Aのシートにあるデータから、複数の指定した『項目の列』を
2行目からデータラストまで、Bのシートに転記したいのですが、
調べたり、試行錯誤しても列ごと(項目含め)転記しか
成功しません。

Aシート(元データ)
1行目(A列〜AA列):項目   &#8701; 名前、電話、住所、県、市  など項目があります。
2行目以降は項目ごとのデータがある

Bシート(抽出先)
1行目(A列〜Z列):項目 &#8701; 住所、県、電話、県  
2行目以降に、該当する項目のデータを貼り付けたい

2週間ほど、検索をしたり、参考書読んだり、YouTubeみたり
したのですが分からず、仕事も効率よくやりたいのですが進まず困っていました。

どなたなわかる方いらっしゃいましたら、教えていただけないでしょうか。
よろしくお願いします。
・ツリー全体表示

【82430】エクセル シートを増やすと VBA の速度が...
発言  westwindow  - 25/1/23(木) 15:16 -

引用なし
パスワード
   エクセルで VBAを使用したシートをコピーして増やすとコピーしたシート分だけ 実行時間がかかります。1分かかる処理があるとしてシート 1つ増やすと2分かかります。シートを2つ 増やすと3分かかります。なぜこのようなことが起こるのかわからないのですが、大変困っています。 防ぐ方法がある場合 教えていただけないでしょうか。

環境
Windows 10
エクセル2016
・ツリー全体表示

【82429】Re:サンダーバードの添付ファイルを複数個
発言  マナ  - 25/1/20(月) 21:21 -

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

検索してみました。
ht tps://gohomeasap.com/thunderbird-11/
・ツリー全体表示

【82428】サンダーバードの添付ファイルを複数個
質問  ぽぽぽん  - 25/1/20(月) 16:34 -

引用なし
パスワード
   お世話になります。

サンダーバードのメール添付で複数ファイルを指定したいのですが
上手くいきません。
下記のコードですと、attachPath1は反映されるのですが
attachPath2が添付されません。
問題個所は「'資料」以降かと思います。

どなたかお分かりになりましたらよろしくお願いします。
(補足 attachPath1が空欄のときでもattachPath2は反映されませんでした。
サンダーバードで自動化されている方のを参考にして、attachPath1とattachPath2
を始まりと終わりをシングルコーテションで囲んでもみたんですが
上手くいきませんでした)

-----------------------------------------------------------
Sub メール送付()


Set masta = Worksheets("取引先マスタ")
Set taisyou = Worksheets("今回メール送付対象顧客")

'メールの作成

Dim sPath As String
Dim mailTo, cc1, cc2, to2, to3 As String
Dim subject, attachPath1, attachPath2, seikyusyo, attachPath As String
Dim mailBody1, mailBody2, atesaki As String


Dim 正式名称, 担当者名
正式名称 = "D"
担当者名 = "G"

'サンダーバード呼び出し
sPath = """C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"" -compose "

With taisyou
Dim lastr, i
lastr = .Cells(Rows.Count, "F").End(xlUp).Row

For i = 2 To lastr

'メール本体
mailTo = .Cells(i, "H").Value
to2 = .Cells(i, "I").Value
to3 = .Cells(i, "J").Value
cc1 = .Cells(i, "K").Value
cc2 = .Cells(i, "L").Value

subject = Worksheets("メール共通").Range("B1").Value
atesaki = .Cells(i, 正式名称) & vbLf & .Cells(i, 担当者名) & vbLf
mailBody1 = Worksheets("メール共通").Range("B2").Value

'請求書


'資料

attachPath1 = Worksheets("添付物").Range("B2").Value
attachPath2 = Worksheets("添付物").Range("B3").Value


Shell sPath & "to=" & mailTo & ";" & to2 & ";" & to3 & _
",cc=" & cc1 & ";" & cc2 & _
",subject=" & subject & ",body=" & atesaki & vbLf & mailBody1 & _
vbLf & ",attachment=" & attachPath1 & "," & attachPath2

Next
End With

End Sub
・ツリー全体表示

【82427】Re:CurrentRegionについて
発言  マナ  - 24/12/27(金) 21:12 -

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

> For i = 3 To Range("C3").CurrentRegion.Rows.Count

CurrentRegion.Rows.Countだと、行数になりますが?
iは最終セルの行番号まで繰り返すべき。

Sub test()
  Dim i As Long, j As Long
  
  For i = 3 To Cells(Rows.Count, 2).End(xlUp).Row
    For j = 3 To Cells(2, Columns.Count).End(xlToLeft).Column
      Cells(i, j).FormulaR1C1 = "=R2C*RC2"
    Next
  Next

End Sub

------------
行数で繰り返すなら

Sub test2()
  Dim r As Range
  Dim i As Long, j As Long
  
  Set r = Range("C3").CurrentRegion
  For i = 2 To r.Rows.Count
    For j = 2 To r.Columns.Count
      r(i, j).FormulaR1C1 _
        = "=R" & r.Row & "C*RC" & r.Column
    Next
  Next

End Sub


------------
なお繰り返しは不要で、一括で数式を挿入できます。

Sub test3()
  Dim r As Range
  
  Set r = Range("C3").CurrentRegion
  Intersect(r, r.Offset(1, 1)).FormulaR1C1 _
    = "=R" & r.Row & "C*RC" & r.Column

End Sub
・ツリー全体表示

【82426】Re:CurrentRegionについて
発言  ふぇふぇ  - 24/12/27(金) 19:49 -

引用なし
パスワード
   Range("C3").CurrentRegion.select
ってやってみればわかるんじゃないですか
・ツリー全体表示

【82425】CurrentRegionについて
質問  櫛田  - 24/12/27(金) 14:28 -

引用なし
パスワード
   C3からL12に解答を記載する100マス計算の問題です。
B2が空白、B3〜B12に1〜10、C2〜L2に1〜10が記載されています。

for i = 3 to 12
for j = 3 to 12
Cells(i, j).FormulaR1C1 = "=R2C*RC2"

とするとうまくいくのですが、

For i = 3 To Range("C3").CurrentRegion.Rows.Count
For j = 3 To Range("C3").CurrentRegion.Columns.Count
Cells(i, j).FormulaR1C1 = "=R2C*RC2"

とすると、9×9までしか計算されず、10の段が計算されません。
勉強をはじめたばかりでなぜかわからず。。。
どならかどうぞご回答よろしくお願いいたします。
・ツリー全体表示

【82424】Re:同じ様式のシートの箇所をsheet1にコ...
お礼  西森  - 24/12/24(火) 1:57 -

引用なし
パスワード
   ▼マナ さん:
できました。
心より感謝致します。
ありがとうございました&#10082;
・ツリー全体表示

【82423】Re:同じ様式のシートの箇所をsheet1にコ...
発言  マナ  - 24/12/21(土) 8:34 -

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

>コピーした結果が057と表示されるようにするにはどうすればいいでしょうか。

貼り付け先(A列)の書式を、「文字列」に設定しておくとよいです。
・ツリー全体表示

【82422】Re:同じ様式のシートの箇所をsheet1にコ...
質問  西森  - 24/12/20(金) 23:56 -

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

セルには数値が文字列として保存されています。
例: 057
このVALUEをコピーすると
57 になってしまいます。
コピーした結果が057と表示されるようにするにはどうすればいいでしょうか。
・ツリー全体表示

【82421】Re:同じ様式のシートの箇所をsheet1にコ...
発言  マナ  - 24/12/20(金) 8:45 -

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

Sub test()
  Dim wsCons As Worksheet
  Dim ws As Worksheet
  Dim n As Long
  
  Set wsCons = ThisWorkbook.Worksheets("Sheet1")
  n = 2
  For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "別紙3*" Then
      wsCons.Cells(n, "A").Value = ws.Cells(22, "B").Value
      n = n + 1
    End If
  Next
  
End Sub
・ツリー全体表示

【82420】同じ様式のシートの箇所をsheet1にコピし...
質問  西森  - 24/12/20(金) 0:34 -

引用なし
パスワード
   こんにちは。
xslmの中に同じ様式のシートがたくさんあります。[シート名は 別紙3、別紙3 (2)、別紙3 (3)、別紙3 (4)、別紙3 (n)、、、、となっています。]

その特定セル(結合されてる)たちを、同じbookのsheet1に次々と値をコピーしたいです。
教えてほしいのはどうnをループさせるか、と、別紙3の値をコピーし終えたら 別紙3 (2)の値をsheet1の1つ下の行にコピーするのをどうやるか です。

よろしくお願いします。

〜〜

Sub Macro3()
'
' Macro1 Macro
'

  Sheets("別紙3 (2)").Select
  Range("B22:K22").Select
  Selection.UnMerge
  Range("B22").Select
  Application.CutCopyMode = False
  ' ActiveCell.FormulaR1C1 = ""
  Selection.Copy
  Sheets("Sheet1").Select
  Range("A2").Select
  'ActiveSheet.Paste
  
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

  Sheets("別紙3 (2)").Select
  Range("B22:K22").Select
  Selection.Merge
  
  
  Sheets("別紙3 (2)").Select
  Range("B20:Q20").Select
  Selection.UnMerge
  Range("B20").Select
  Application.CutCopyMode = False
  ' ActiveCell.FormulaR1C1 = ""
  Selection.Copy
  Sheets("Sheet1").Select
  Range("B2").Select
  ' ActiveSheet.Paste
  
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
   
  Sheets("別紙3 (2)").Select
  Range("B20:Q20").Select
  Selection.Merge
  
  
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 1
End Sub
・ツリー全体表示

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