Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
コピー範囲選択について
投稿日時: 18/05/25 10:58:26
投稿者: oka2018

コピー範囲を選択したいのですが、空白セルに数式が入っているため、選択範囲が大きくなっています。
 
Sub Macro1()
 
  Range("A1", Cells(Rows.Count, "C").End(xlUp)).Select
 
End Sub
 
この場合どうすればよいのでしょうか?宜しくお願い致します。

回答
投稿日時: 18/05/25 11:30:33
投稿者: mattuwan44

っと、
 
A列にも数式が入っているのですか?
そうでなければ、A列の最終行を取得して右に2つオフセットしたところが、
セル範囲の右下になりますよね?
 
また、1行目がタイトル行ならば、
オートフィルターで空白以外を抽出してコピペしてもよいでしょう。

回答
投稿日時: 18/05/25 20:11:43
投稿者: WinArrow
投稿者のウェブサイトに移動

oka2018 さんの引用:
コピー範囲を選択したいのですが、空白セルに数式が入っているため、選択範囲が大きくなっています。
 
Sub Macro1()
 
  Range("A1", Cells(Rows.Count, "C").End(xlUp)).Select
 
End Sub
 
この場合どうすればよいのでしょうか?宜しくお願い致します。

 
説明の内容からすると
C列セルに数式が予め入力されているような感じがします。
mattuwan44 さんのレスにあるように
A列の最終行を求めればよいのかもしれません。
 
根本的な解決方法は、予め数式を入力するのではなく
データが入った件数にあわせて数式を埋め込むようにすれば、
余計なことを考えなくても済みます。
 
因みに
>空白セル
とは、何も入っていないセルのことで、数式が入っているセルを「空白セル」とはいいません。
 
数式が入っていて空白に見えるセル
の方が素直な表現です。

回答
投稿日時: 18/05/25 20:32:15
投稿者: WinArrow
投稿者のウェブサイトに移動

数式が入っていて、空白に見えるセルの話をさせていただいたですが、
追加レスです。
 
そのセルを「値」に変換した場合も、同様に「空白に見えるセル」です。
この場合は、「空白文字列」といいます。
「空白文字列」とは、長さ=0の文字列という意味です。

回答
投稿日時: 18/05/26 18:19:04
投稿者: WinArrow
投稿者のウェブサイトに移動

データ件数に対応して、C列セルに数式を入れるコード例
 
1行目を項目名の行と仮定して
 
With ActiveSheet
    .Cells(2, "C").Resize(,Cells(.Rows.Count, "B").End(xlUp).Row-1).Formula = "=数式"
End With

投稿日時: 18/05/28 17:29:38
投稿者: oka2018

お世話になっております。
 
A列に数式が入っております。空白文字列というのですね。
ご指摘のようにデータが入った件数にあわせて数式を埋め込むのがよいのでしょうが、
その方向ではありません。
 
シート1からリンク貼付けでシート2で作業しております。そのため、文字等入ってないセルは0になっております。

回答
投稿日時: 18/05/28 21:09:30
投稿者: simple

Sub test()
    Dim lastRow As Long
    lastRow = Columns("C").find(What:="*", After:=Range("C1"), _
        LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, MatchCase:=False, _
        MatchByte:=False, SearchFormat:=False).Row
    Range("A1", Cells(lastRow, "C")).Select
End Sub
というようなことですか?
 
そのC列に入っているセルは、0じゃなくて空白セルなんですよね。

投稿日時: 18/05/29 08:55:09
投稿者: oka2018

お世話になっております。すみません、有難うございます。
 
下記で上手く出来ました。
 
Sub Macro1()
 
r = 2
Do Until Cells(r, 1) = ""
r = r + 1
Loop
r = r - 1
Range("A1:C" & r).Select
 
End Sub