![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.5ベストアンサー
- 回答日時:
e-l 様
返事が遅くなってすみません。
num = Application.CountA(Range("A:E").Offset(, 256 - 5))
*
Application.CountA
は、WorksheetFunction.CountA (ワークシートの関数)のことですが、旧バージョンの書き方ですが、便利なことも多いので、Application.CountA を使っています。CountA の場合は、WorksheetFunction.CountA としても、変わりないはずです。
ただ、このApplication.[ワークシート関数] という使い方と、WorksheetFunction.[ワークシート関数]の使い方の相違点は、その戻り値のエラーの返し方です。一度、テストしてみると分かります。
関数にもよりますが、Application.[ワークシート関数]は、IsError(戻り値)で、検出できますが、WorksheetFunction.[ワークシート関数]は、実行時エラーになってしまいます。実行時エラーになった時は、On Error トラップでしか、解除できません。そのための補正コードを用意しなければなりません。
**
Offset(, 256-5)
256-5 の意味はおわかりになっているでしょうけれども、
ヘルプをよくみていだくとわかりますが、
expression.Offset(RowOffset, ColumnOffset)
RowOffset 省略可能です。
ColumnOffset 省略可能です。
つまり、RowOffset側を省略しているのですね。
これは、私の持論なのですが、VBAなどのインタープリタ言語(スクリプト言語の部分もある)の場合は、なるべく「余計なことは書かない」というのが原則だと思います。そんなことをしても、千分の1秒にも満たないことですが、積もり積もれば、変わるかもしれない、ということです。
これは、単に、カッコウ付けだけではなく、こういう意図が含まれています。かく言う私は、以前、そういうコードをみて、カッコウ付けだけのようにみえて、そんなことをしなくても、分かりやすく書いて欲しいと思ってみてました。(^^;
No.4
- 回答日時:
#2 のWendy02 です。
>プログラムの概要は、
>5列追加して、そこに処理結果を表示します。そして、またプログラムを実行
>させると、さらに5列追加されて、先ほどの処理結果は右にずれていきます。
>新しい、処理結果は常に先頭に、古い処理結果は常に右にあるようにしていま
>す。
最初から、それを書いてくれていたら、そのまま書けたのですが。もちろん、#2 を書くときに、今回の反応は多少の予想していたことですが。(^^;
Sub Sample2()
Dim num As Long
num = Application.CountA(Range("A:E").Offset(, 256 - 5))
If num > 0 Then
If MsgBox("最終列5行を削除しますがよろしいですか?", _
vbQuestion + vbOKCancel) = vbOK Then
Range("A:E").Offset(, 256 - 5).ClearContents
Range("A:E").Insert
End If
End If
End Sub
まあ、削除せずに、隣のシートに移したり、テキストに落としていく方法もありますね。
この回答への補足
お返事が遅くなりました。説明不足で大変申し訳御座いませんでした。的確にコードを作って頂いて感謝しております。
宜しければ、コードが意味するところを教えて頂けると勉強になります。まず、
num = Application.CountA(Range("A:E").Offset(, 256 - 5))
は、何をしているのでしょうか?.CountAとOffset(, 256 - 5)の記述は初めて目にしました。offsetは分かるのですが(, 256-5)のカンマはどのような意味を持つのでしょうか。
小さいことで申し訳ありません。ヘルプを見たのですが、分かりませんでした。宜しくお願い致します。
No.3
- 回答日時:
> 何度かは、思い通りに動かすことができたのですが、今は動いてくれません。
Ctrl+Endキーで、使用している(または使用した)範囲の最も右下のセルにジャンプできます。
値・式が無くても、過去の範囲を覚えているようです。
「今は動いてくれません」のシート上でこれを実行したとき、セルはどこが選択されますか?
思いのほか右側の列まで「使用した」ことになっていませんか?
もしもそうなら、「ご自身が使用した最も右端の列」+1列~「EXCELが覚えている使用したことになっている列」までを選択し、「削除-列全体」削除を行い、さらにその直後に「上書き保存」してください。
※列削除の直後に「上書き保存」することがポイントです。
その後、Ctrl+Endキーで、使用した範囲の最も右下のセルを確認してみてください。
有難う御座います。この方法で一応できました。しかし、私のコードを用いて他人も使うので予めコードで、このようなことが起こらないようにしたいと考えています。
No.2
- 回答日時:
右側の該当セルに何か入っていたら、Insert を取りやめにするか、その範囲をあらかじめ、Clearでもするか、どちらかになるのではないでしょうか?
例:
Sub test()
Dim num As Long
num = Application.CountA(Range("A:E").Offset(, 256 - 5))
If num = 0 Then
Range("A:E").Insert
End If
End Sub
この回答への補足
ご返答有難うございます。右側の該当セルに何か入っていたことが問題なのでしょうか?
プログラムの概要は、
5列追加して、そこに処理結果を表示します。そして、またプログラムを実行させると、さらに5列追加されて、先ほどの処理結果は右にずれていきます。新しい、処理結果は常に先頭に、古い処理結果は常に右にあるようにしています。
何度かは、思い通りに動かすことができたのですが、今は動いてくれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセルで最下行にデータを追加するVBA 6 2023/05/09 09:30
- Visual Basic(VBA) VBAで実行時エラー'424' オブジェクトが必要ですと出る 2 2022/10/07 09:25
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- その他(パソコン・スマホ・電化製品) エクセル初心者です。 仕事でエクセルを使っていて、普段は素人でもできる簡単な関数を使ったことがある程 1 2022/05/25 11:17
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
マクロ実行後に別シートの残像...
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
【VBA】特定の条件でセルをコピー
-
VBA 実行時エラー1004 rangeメ...
-
複数シートの複数列に入力され...
-
Count Ifのセルの範囲指定に変...
-
VBA Userformで一部別シートに...
-
VBAで変数の数/変数名を動的に...
-
どなたかマクロコードを教えて...
-
エクセル VBA 時系列に横一列に...
-
Excelのシート別でのセルのリン...
-
Unionでの他のシートの参照につ...
-
VBAでEXCELから固定長...
-
ExcelのVBマクロを、バックグラ...
-
同じ作業(データコピー・貼付...
-
Changeイベントで複数セルへの...
-
VBAのグラフに違うシートの...
-
ExcelVBAでDo Until loopのネス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
Count Ifのセルの範囲指定に変...
-
VBA 別ブックからの転記の高速...
-
VBA別シートの最終行の次行へ転...
-
Changeイベントで複数セルへの...
-
複数シートの複数列に入力され...
-
ExcelのVBマクロを、バックグラ...
-
VBA 実行時エラー1004 rangeメ...
-
楽天RSSからエクセルVBAを使用...
-
【VBA】特定の条件でセルをコピー
-
100万件越えCSVから条件を満た...
-
Excel2013で切り取り禁止
-
VBAで変数の数/変数名を動的に...
-
アクセスからエクセルへ出力時...
-
Unionでの他のシートの参照につ...
-
グラフマクロで系列を変数にす...
-
Excel VBA オートフィルターで...
おすすめ情報