[[20200526095944]] 『貼り付け先にシートに特定の文字列を含む表が存在』(道産子) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『貼り付け先にシートに特定の文字列を含む表が存在しない場合に表を貼り付けたい。』(道産子)

こんにちは。
貼り付け先のシートに文字列"A"を含む表が存在しないときに、文字列"A"を含む表を貼り付けるプログラムを書いたのですが、上手くいきません。
どなたかご教授お願いします。

コピー元シート:Sheet1
貼り付け先シート:Sheet2

(プログラム内容)
  Dim LastRow As Long

    Dim i As Long
    Dim count As Integer

//Sheet1のA列に文字列"A"を含む表があればカウント

    LastRow = Worksheets("Sheet2").Cells(Rows.count, 1).End(xlUp).Row

    For i = LastRow To 4 Step -1
     count = WorksheetFunction.CountIf(Worksheets("Sheet2").Cells(i, "A").MergeArea, Value = "A")
    Next i

//A列に"A"を含む表がない場合、Sheet1から表をコピー

        If count = 0 Then
            Worksheets("Sheet1").Range
            ("A3:R13").Copy

            Worksheets("Sheet1").Select
            Worksheets("Sheet1").Range("A" & LastRow).Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False

        End If

< 使用 Excel:Excel2019、使用 OS:Windows10 >


カウント部分のみですが、こんな感じですか?

 With Worksheets("Sheet2")
     count=WorksheetFunction.CountIf(.Range("A4",.Cells(LastRow,"A")),"*A*")
 End With

Countif関数の記述が間違っていると思いますが。
(tkit) 2020/05/26(火) 10:45


回答していただき、ありがとうございます。
上手くいきました!

一つ確認したいのですが、今回はA列について特定の文字列がある場合にカウントすることに
なっていますが、Rangeの中身が"A4"となっているのはなぜですか?
ご伝授お願いします。
(道産子) 2020/05/26(火) 11:04


 まず、前提として、Countif関数は、セル範囲の中から該当するセルの数を返します。
 ですので、セル範囲を張り付けてあるコードから探しました。

 >LastRow = Worksheets("Sheet2").Cells(Rows.count, 1).End(xlUp).Row
                          ↑
 LastRowはA列から求めていますよね。

 >For i = LastRow To 4 Step -1
      count = WorksheetFunction.CountIf(Worksheets("Sheet2").Cells(i, "A").MergeArea, Value = "A")
    Next i

 から、A列のLastRow行から、マイナス方向にA列の4行まで行おうとしていますので、
 範囲としてはA4からCells(LastRow,"A")の範囲になります。

 Range("A4:A"&LastRow)でもいいですね。

(tkit) 2020/05/26(火) 11:22


とても分かりやすい回答ありがとうございます。
理解出来ました!

(道産子) 2020/05/26(火) 11:37


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.