Excel VBA質問箱 IV

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

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


4330 / 13646 ツリー ←次へ | 前へ→

【57281】A列からN列までのコピーのしかたを教えていただけないでしょうか とも 08/8/4(月) 20:35 質問[未読]
【57283】Re:A列からN列までのコピーのしかたを教え... かみちゃん 08/8/4(月) 21:03 発言[未読]
【57286】Re:A列からN列までのコピーのしかたを教え... とも 08/8/4(月) 21:42 質問[未読]
【57287】Re:A列からN列までのコピーのしかたを教え... かみちゃん 08/8/4(月) 21:52 発言[未読]
【57284】Re:A列からN列までのコピーのしかたを教え... kanabun 08/8/4(月) 21:34 発言[未読]
【57285】Re:A列からN列までのコピーのしかたを教え... かみちゃん 08/8/4(月) 21:38 発言[未読]
【57288】Re:A列からN列までのコピーのしかたを教え... kanabun 08/8/4(月) 22:00 質問[未読]
【57291】Re:A列からN列までのコピーのしかたを教え... かみちゃん 08/8/4(月) 22:11 発言[未読]
【57289】Re:A列からN列までのコピーのしかたを教え... kanabun 08/8/4(月) 22:04 発言[未読]
【57290】Re:A列からN列までのコピーのしかたを教え... とも 08/8/4(月) 22:05 お礼[未読]

【57281】A列からN列までのコピーのしかたを教えて...
質問  とも  - 08/8/4(月) 20:35 -

引用なし
パスワード
   こんばんは、またご質問させていただきます。
単純な質問だと思いますが、私には難しくて・・・
Excel2000です。
データはA列からN列まであります。
行はその時々で不特定です。
そこで、いろんな資料を見てA列の空白以外をコピーする
と言う下記のようなのが有りましたので使っていたのですが

Range("A1").CurrentRegion.Select   
Selection.Copy

問題が発生してしまいました。
多行ある場合はA〜N列まで空白は有るものの
全ての行にデータが入っていますので問題ありませんでしたが
少行の場合、たまにL列にデータが無い場合があります。
その場合、上記ですとA〜K列までしかコピーしてくれません。
M、N列にはデータが入っています。
何かいい方法を教えていただけないでしょうか、
宜しくお願いいたします。

【57283】Re:A列からN列までのコピーのしかたを教...
発言  かみちゃん  - 08/8/4(月) 21:03 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>データはA列からN列まであります。
>行はその時々で不特定です。

求めたい行の範囲のA列の最終行には必ずデータが入っている場合、
つまり、求めたい範囲がA1:N10の場合、A10セルにはデータが入っているのであれば、
Endプロパティを使って、以下のような感じになります。

Sub Sample1()
 MsgBox Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 14).Address
End Sub

汎用性を求めるならば、以下のような書き方もできます。
Sub Sample2()
 With Range("A1")
  MsgBox .Resize(.Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1, 14).Address
 End With
End Sub

ただし、A〜N列の間の最終行がバラバラで、時によって違う場合や、
最終行が、数式で""という空白の結果になっている場合などは、Endプロパティ
による判定ができませんので、以下のような方法になります。

Sub Sample3()
 Dim FR As Range
 
 With Columns("A:N")
  Set FR = .Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
  MsgBox Range(.Cells(1, 1), FR).Columns(1).Resize(, 14).Address
 End With
End Sub

【57284】Re:A列からN列までのコピーのしかたを教...
発言  kanabun  - 08/8/4(月) 21:34 -

引用なし
パスワード
   ▼とも さん:
横から失礼。

>データはA列からN列まであります。
>行はその時々で不特定です。

単純に、

  ActiveSheet.UsedRange.Copy

ではだめですか?(^^

【57285】Re:A列からN列までのコピーのしかたを教...
発言  かみちゃん  - 08/8/4(月) 21:38 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>データはA列からN列まであります。
>>行はその時々で不特定です。
>
>単純に、
>
>  ActiveSheet.UsedRange.Copy
>
>ではだめですか?(^^

ケチをつけるわけではありませんが、UsedRangeプロパティの使い方には注意が必要だと思います。
http://www.moug.net/tech/exvba/0050092.htm

【57286】Re:A列からN列までのコピーのしかたを教...
質問  とも  - 08/8/4(月) 21:42 -

引用なし
パスワード
   かみちゃんさん、こんばんは。
早々のご教授有難う御座います。
A列には空白はありません、またN列にも空白はありません。
と言うことで、

Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 14).Address
Selection.Copy

こちらを試させて頂いたのですが、.Addressのところで
コンパイルエラーが出てしまいますどうしてでしょうか?

【57287】Re:A列からN列までのコピーのしかたを教...
発言  かみちゃん  - 08/8/4(月) 21:52 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 14).Address
>Selection.Copy
>
>こちらを試させて頂いたのですが、.Addressのところで
>コンパイルエラーが出てしまいますどうしてでしょうか?

エラーメッセージは正確に書くようにしませんか?
そのエラーメッセージのとおりで、
私は、
MsgBox 〜.Address
と書いたはずです。

列範囲を表示したいなら、
MsgBox 〜.Address
などと記述しないといけませんし、
列範囲を選択(Select)したいならば、
Addressではなく、Select
とします。

なお、
Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 14).Select
Selection.Copy
は、
Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 14).Copy
とも書けます。

また、今回は、関係ないかもしれませんが、
> A列には空白はありません
とのことですが、
仮に、数式で結果が""となっているような場合は、Endプロパティでの最終行は
意図しない結果を得る場合があるので、注意が必要です。

仮に
A列の最終行の次の行に
=""
という数式を入れて、
MsgBox Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 14).Address
で、範囲が1行下に余計な部分が選択されていることを確認してみてください。

【57288】Re:A列からN列までのコピーのしかたを教...
質問  kanabun  - 08/8/4(月) 22:00 -

引用なし
パスワード
   > ケチをつけるわけではありませんが、
> UsedRangeプロパティの使い方には注意が必要

どういう注意ですか?

[A1]から N列のn行までデータがある、
途中 空白だけの列がある、
というのですから、
UsedRange プロパティが簡単だと思ったのですが?

【57289】Re:A列からN列までのコピーのしかたを教...
発言  kanabun  - 08/8/4(月) 22:04 -

引用なし
パスワード
   [XL97]Excel 97 VBA で拡張された機能
http://support.microsoft.com/kb/408877/ja

>UsedRange プロパティ
>以前のバージョンでは、データ削除後ワークブックを保存しなければ最後の
>セルの最新の情報を取得することができませんでした。
>これが Excel 97 では、保存しない状態でも最新の情報を取得できるように
>なりました。

【57290】Re:A列からN列までのコピーのしかたを教...
お礼  とも  - 08/8/4(月) 22:05 -

引用なし
パスワード
   かみちゃんさん、こんばんは。
有難う御座います、よく分かりました。
プラパティの使い方が違うと出ておりました。
当然ですよね!
いろいろ、勉強になり本当に有難うございます。

にわか仕込みの勉強しかしていないので
単純なところに気が付かず、せっかくご親切に
教えて頂いているのに、申し訳御座いませんでした。
もっと理解を深めて行きたいと思います。
楽をしてと思われるかも分かりませんが
理解力の低い私には、VBA質問箱が頼みの綱ですので
今後も是非、お力をお貸しください。
宜しくお願いいたします。
有難う御座いました。

>こんにちは。かみちゃん です。
>
>>>データはA列からN列まであります。
>>>行はその時々で不特定です。
>>
>>単純に、
>>
>>  ActiveSheet.UsedRange.Copy
>>
>>ではだめですか?(^^
>
>ケチをつけるわけではありませんが、UsedRangeプロパティの使い方には注意が必要だと思います。
>http://www.moug.net/tech/exvba/0050092.htm

【57291】Re:A列からN列までのコピーのしかたを教...
発言  かみちゃん  - 08/8/4(月) 22:11 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>> UsedRangeプロパティの使い方には注意が必要
>
>どういう注意ですか?
>
>[A1]から N列のn行までデータがある、
>途中 空白だけの列がある、
>というのですから、
>UsedRange プロパティが簡単だと思ったのですが?

そういう前提、かつ、Copy元の範囲だから、それでも今回は、いいのかもしれませんが、
UsedRangeが値が入っている最大の範囲であるという誤解を、質問者のともさんに
していただきたくなかっただけです。

kanabunさんはよくご存知かもしれませんが、紹介しましたURLには、以下の
ようにあります。
> 一目見てわかる書式の変更なら良いのですが、例えば表示形式が変更されている
> 場合には、一目見ただけでの判断は不可能です。そういった可能性のあるワーク
> シートでの使用には注意が必要です。

ですから、私は、あえて、UsedRangeを紹介しませんでしたし、Endプロパティの
期待しない動きをすることがある例をあげさせていただきました。

まぁ、いろいろなパターンがあって、簡単に片付く話ではないと、個人的には思っています。

情報を出しすぎて、かえって混乱を招く結果になったなら、謝りたいと思います。

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