Excel VBA質問箱 IV

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

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


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

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

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

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

【82419】Re:sumifsを使ったVBAの作り方
お礼  NANAMI E-MAIL  - 24/12/18(水) 17:27 -

引用なし
パスワード
   ▼マナ さん:
>▼NANAMI さん:
>>
>>for nextとsumifsを使って作りたいのです
>
>Worksheets("練習15")では、ループ必要ないでしょう。
>
>Sub test()
>  Dim r1 As Range
>  Dim r2 As Range
>  Dim i As Long
>  Dim j As Long
>  
>  Set r1 = Worksheets("練習15").Range("A1").CurrentRegion
>  Set r2 = Worksheets("練習15_回答").Range("A1").CurrentRegion
>  
>  For i = 2 To r2.Rows.Count
>    For j = 2 To r2.Columns.Count
>      r2(i, j).Value = WorksheetFunction.SumIfs(r1.Columns(3), _
>        r1.Columns(1), r2(1, j).Value, r1.Columns(2), r2(i, 1).Value)
>    Next
>  Next
>
>End Sub
>
>数式を一括で挿入して、それを値に変換すると
>ープなしでできます。
>
>Sub test2()
>  Dim r1 As Range
>  Dim r2 As Range
>  Dim f As String
>
>  Set r1 = Worksheets("練習15").Range("A1").CurrentRegion
>  Set r2 = Worksheets("練習15_回答").Range("A1").CurrentRegion
>  Set r2 = Intersect(r2, r2.Offset(1, 1))
>  
>  f = "=sumifs(" _
>    & r1.Columns(3).Address(-1, -1, , -1) & "," _
>    & r1.Columns(1).Address(-1, -1, , -1) & "," _
>    & r2(0, 1).Address(-1, 0) & "," _
>    & r1.Columns(2).Address(-1, -1, , -1) & "," _
>    & r2(1, 0).Address(0, -1) & ")"
>    
>  r2.Formula = f
>  r2.Value = r2.Value
>
>End Sub


sumifsを使ったVBA、とてもわかりやすかったです。理解できました。ありがとうございました。
・ツリー全体表示

【82418】Re:sumifsを使ったVBAの作り方
発言  マナ  - 24/12/17(火) 20:09 -

引用なし
パスワード
   ▼NANAMI さん:
>
>for nextとsumifsを使って作りたいのです

Worksheets("練習15")では、ループ必要ないでしょう。

Sub test()
  Dim r1 As Range
  Dim r2 As Range
  Dim i As Long
  Dim j As Long
  
  Set r1 = Worksheets("練習15").Range("A1").CurrentRegion
  Set r2 = Worksheets("練習15_回答").Range("A1").CurrentRegion
  
  For i = 2 To r2.Rows.Count
    For j = 2 To r2.Columns.Count
      r2(i, j).Value = WorksheetFunction.SumIfs(r1.Columns(3), _
        r1.Columns(1), r2(1, j).Value, r1.Columns(2), r2(i, 1).Value)
    Next
  Next

End Sub

数式を一括で挿入して、それを値に変換すると
ープなしでできます。

Sub test2()
  Dim r1 As Range
  Dim r2 As Range
  Dim f As String

  Set r1 = Worksheets("練習15").Range("A1").CurrentRegion
  Set r2 = Worksheets("練習15_回答").Range("A1").CurrentRegion
  Set r2 = Intersect(r2, r2.Offset(1, 1))
  
  f = "=sumifs(" _
    & r1.Columns(3).Address(-1, -1, , -1) & "," _
    & r1.Columns(1).Address(-1, -1, , -1) & "," _
    & r2(0, 1).Address(-1, 0) & "," _
    & r1.Columns(2).Address(-1, -1, , -1) & "," _
    & r2(1, 0).Address(0, -1) & ")"
    
  r2.Formula = f
  r2.Value = r2.Value

End Sub
・ツリー全体表示

【82417】sumifsを使ったVBAの作り方
質問  NANAMI E-MAIL  - 24/12/17(火) 13:12 -

引用なし
パスワード
   VBAを勉強し始めたばかりの初心者です。
sheet1の売り上げデータを元に、sheet2(sheet2とはタブが別のシート)の店と商品ごとの売り上げ集計をしたい。といった問題です。
模範解答はこちらです。
Sub 練習問題15()
  Dim i As Long
  Dim ixR As Long
  Dim ixC As Long
  Dim ws1 As Worksheet
  Dim ws2 As Worksheet
  Set ws1 = Worksheets("練習15")
  Set ws2 = Worksheets("練習15_回答")
  ws2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents
  With ws1
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      ixC = 2
      Do Until ws2.Cells(1, ixC) = .Cells(i, 1)
        ixC = ixC + 1
      Loop
      ixR = 2
      Do Until ws2.Cells(ixR, 1) = .Cells(i, 2)
        ixR = ixR + 1
      Loop
      ws2.Cells(ixR, ixC) = ws2.Cells(ixR, ixC) + .Cells(i, 3)
    Next
  End With
End Sub


do loop の無限ループを防ぎたく、for nextとsumifsを使って作りたいのですが、作り方がわかりません。
どなたかご教示いただきたくお願いいたします。
ちなみにこちらがsumifsで自分なりに作ったVBAです。当然起動しませんでした。


Sub 練習問題15()
  Application.ScreenUpdating = False
  Dim i As Long
  Dim j As Long
  Dim ws2Row As Long
  Dim ws2column As Long
  Dim ws1 As Worksheet
  Dim ws2 As Worksheet
  Set ws1 = Worksheets("練習15")
  Set ws2 = Worksheets("練習15_回答")
  ws2.Range("A1").CurrentRegion.Offset(1, 1).ClearContents
  With ws1
    For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
    For j = 1 To 3
      With ws2
      For ws2Row = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
      For ws2column = 2 To 5
      .Cells(ws2Row, ws2column).Value = Application.WorksheetFunction.
        SumIfs(.Range("C1", Cells(i, 3)), .Range("A1", Cells(i, 1)), Cells(1, ws2column), .Range("B1", Cells(i, 2)), Cells(ws2Row, 1))
      Next
      End With
  End With
    
End Sub
・ツリー全体表示

【82416】Re:範囲内のセルをダブルクリックでカウ...
お礼  mmmm E-MAIL  - 24/12/9(月) 17:15 -

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

解決しました!
ご協力ありがとうございます!
勉強になりました!!
・ツリー全体表示

【82415】Re:weekdayを使用した合計金額と曜日ごと...
お礼  NANAMI E-MAIL  - 24/12/9(月) 16:56 -

引用なし
パスワード
   ▼マナ さん:
>▼NANAMI さん:
>
>1)
>
>>intW = Weekday(DateSerial(Cells(i, 1), Cells(i, 2), Cells(i, 3)), vbMonday)
>
>intW は、月曜日なら1、火曜日なら2、…、日曜日なら7
>
>
>したがって、
>
>>「Cells(intW + 1, ●)」
>
>月曜日なら2行目、火曜日なら3行目、…、日曜日なら8行目に
>集計結果を出すということ。
>
>
>2)
>
>>Cells(intW + 1, 7) = Cells(intW + 1, 7) + Cells(i, 4)
>
>7列目(行は曜日別)に、4列目の値(売上金額)を加算
>
>>Cells(intW + 1, 8) = Cells(intW + 1, 8) + 1
>
>8列目(行は曜日別)に、1を加算
>
>
>これすべてのデータで繰り返すことで、
>売上の合計と日数を曜日別に行を変えて出力しています。
>
>
>   


問題の出題元よりもわかりやすい解説を提示いただきありがとうございました。
大変助かりました。ありがとうございました。
・ツリー全体表示

【82414】Re:weekdayを使用した合計金額と曜日ごと...
発言  マナ  - 24/12/8(日) 9:21 -

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

1)

>intW = Weekday(DateSerial(Cells(i, 1), Cells(i, 2), Cells(i, 3)), vbMonday)

intW は、月曜日なら1、火曜日なら2、…、日曜日なら7


したがって、

>「Cells(intW + 1, ●)」

月曜日なら2行目、火曜日なら3行目、…、日曜日なら8行目に
集計結果を出すということ。


2)

>Cells(intW + 1, 7) = Cells(intW + 1, 7) + Cells(i, 4)

7列目(行は曜日別)に、4列目の値(売上金額)を加算

>Cells(intW + 1, 8) = Cells(intW + 1, 8) + 1

8列目(行は曜日別)に、1を加算


これすべてのデータで繰り返すことで、
売上の合計と日数を曜日別に行を変えて出力しています。


   
・ツリー全体表示

【82413】weekdayを使用した合計金額と曜日ごとの...
質問  NANAMI E-MAIL  - 24/12/7(土) 23:43 -

引用なし
パスワード
   A列とB列、C列にそれぞれ、年月日が分けて入力されており、日にちごとに売上金額が記載されている表です。それを、曜日ごとに売上金額の合計と日数、曜日ごとの売り上げ平均を別の表にまとめようとしています。


Sub 練習問題12()
  Dim i As Long
  Dim intW As Integer
  Range("G2:I8").ClearContents
  For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    intW = Weekday(DateSerial(Cells(i, 1), Cells(i, 2), Cells(i, 3)), vbMonday)
    Cells(intW + 1, 7) = Cells(intW + 1, 7) + Cells(i, 4)
    Cells(intW + 1, 8) = Cells(intW + 1, 8) + 1
  Next
  For i = 1 To 7
    Cells(i + 1, 9) = Cells(i + 1, 7) / Cells(i + 1, 8)
  Next
End Sub

上記答えの、
    Cells(intW + 1, 7) = Cells(intW + 1, 7) + Cells(i, 4)
    Cells(intW + 1, 8) = Cells(intW + 1, 8) + 1
  Next
  For i = 1 To 7
    Cells(i + 1, 9) = Cells(i + 1, 7) / Cells(i + 1, 8)
の部分がすべてわからないのですが、特に、「Cells(intW + 1, ●)」はどういう意味でしょうか?
なにを示しているのでしょうか?

VBAを我流で勉強し始めて一週間程度です。
ご回答いただけると幸いです。
・ツリー全体表示

【82412】Re:範囲内のセルをダブルクリックでカウ...
発言  マナ  - 24/12/7(土) 10:44 -

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  
  If Intersect(Target, Range("A2:B4")) Is Nothing Then Exit Sub
  If Not IsNumeric(Target.Value) Then Exit Sub
  Cancel = True
  Target.Value = Target.Value + 1
  
End Sub
・ツリー全体表示

【82411】Re:範囲内のセルをダブルクリックでカウ...
質問  mmmm E-MAIL  - 24/12/6(金) 16:57 -

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

上記の式をSheetに入力し試してみたのですが、範囲外でも内でもポップアップが出た後にカウントが始まってしまいます。解決するにはどのようにしたらよいのでしょうか。
マクロを勉強し始めたばかりでお手数おかけしますが、ご教授頂けますと幸いです。
・ツリー全体表示

【82410】Re:範囲内のセルをダブルクリックでカウ...
発言  ふぇふぇ  - 24/12/6(金) 16:42 -

引用なし
パスワード
   Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rng As Range
Cancel = True
Set rng = Application.Intersect(Target, Range("B2:D10"))
If rng Is Nothing Then
  MsgBox "B2:D10範囲外です"
Else
  MsgBox "B2:D10範囲内です"
End If
End Sub
・ツリー全体表示

【82409】範囲内のセルをダブルクリックでカウント...
質問  mmmm E-MAIL  - 24/12/6(金) 12:35 -

引用なし
パスワード
   下記の式でセルをダブルクリックでカウントアップできるようになったのですが、
指定した範囲内のセルにのみ適応するにはどのように変更すれば良いのかご教授頂けますと幸いです。


Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
On Error Resume Next
Dim c As Long
c = Cells(Target.Row, Target.Column).Value
c = c + 1
Cells(Target.Row, Target.Column) = c
End Sub
・ツリー全体表示

【82408】Re:飛び飛びのセル範囲指定に一次元配列...
お礼  モモ  - 24/11/28(木) 12:53 -

引用なし
パスワード
   ▼マナ さん:
>▼モモ さん:
>
>>やり方がありますでしょうか?
>
>
>できません。書き込みを繰り返してください。

承知しました。
ありがとうございました。
・ツリー全体表示

【82407】Re:飛び飛びのセル範囲指定に一次元配列...
発言  マナ  - 24/11/28(木) 9:45 -

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

>やり方がありますでしょうか?


できません。書き込みを繰り返してください。
・ツリー全体表示

【82406】飛び飛びのセル範囲指定に一次元配列から...
質問  モモ  - 24/11/27(水) 22:52 -

引用なし
パスワード
   Dim str(2) As Variant
str(0) = "りんご"
str(1) = "みかん"
str(2) = "ぶどう"
Range("C5,C8,C9").Value = str

※質問用の仮コードなので間違いがあるかもしれません。

のようなコードで、
C5セル=りんご
C8セル=みかん
C9セル=ぶどう
をセットしたいです。

ところが実行すると3セルともりんごがセットされてしまいます。
やり方がありますでしょうか?

ご教授よろしくお願いいたします。
・ツリー全体表示

【82405】Re:on error goto の2回目の処理
お礼  ぽぽぽん  - 24/11/19(火) 23:32 -

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

返事遅くなってしまい申し訳ございません。
ちょうだいしたコードを参考に修正したところうまくいきました!
ありがとうございます!
どうやらerror goto labelのlabelでの処理をexit subの外にだしていないのが
原因だったようです。

重ね重ねアドバイスありがとうございました!
・ツリー全体表示

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