質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

17147閲覧

Excel VBA で範囲を指定して消去したい。

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/06/21 16:05

実現したいこと
VBA でcsvファイルを読込み、その値をエクセルのシートにコピーする。(ここまでは調べてできました。)

ファイルを選択した際に、Excelの以前のデータが入っていたらそれを、削除してコピーをしたいのですが、それができません。

例えば、ExcelのA6〜Z30くらいの範囲で、何か値が入っていたら削除してからコピーをしたいです。

以下がExcelのシートをコピーする時に使用しているコードです。

こんな初歩的な質問で大変申し訳ないのですが、
もし可能でしたらアドバイスを頂けますと幸いです。
いつも、ちょっとした事でつまづいてしまいます。。

Sub readBtn_Click() Dim FileType As String Dim FileNamePath As Variant Dim textline, csvline() As String Dim Rowcnt, ColumNum As Integer Dim ch1 As Long Dim inputSheet As Worksheet Set inputSheet = ActiveSheet FileType = "CSV ファイル (*.csv),*.csv" FileNamePath = SelectFileNamePath(FileType) If FileNamePath = False Then End End If ch1 = FreeFile Open FileNamePath For Input As #ch1 On Error GoTo CloseFile Rowcnt = 1 Do While Not EOF(ch1) Line Input #ch1, textline textline = Replace(textline, """", "") csvline() = Split(textline, ",") Range(Cells(Rowcnt + 6, 1), _ Cells(Rowcnt + 6, UBound(csvline()) + 1)) = csvline() Rowcnt = Rowcnt + 1 Loop CloseFile: Close #ch1 End Sub Function GetItemNum(FileNamePath) As Integer Dim ch1 As Long Dim textline As String ch1 = FreeFile Open FileNamePath For Input As #ch1 Line Input #ch1, textlineå Close #ch1 GetItemNum = 1 Do GetItemNum = GetItemNum + 1 textline = Mid(textline, InStr(textline, ",") + 1) Loop Until InStr(textline, ",") = 0 End Function Function SelectFileNamePath(FileType) As Variant SelectFileNamePath = Application.GetOpenFilename(FileType) End Function

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

こんな感じでしょうか。

VBA

1If Application.WorksheetFunction.CountA(Range("A6:Z30")) > 0 Then 2 Range("A6:Z30").Clear 3End If

そもそも「何かあれば消す」と「何もない」はイコールの状態だと思うので、常に消しても良いのではと思います。

投稿2016/06/22 00:23

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Forループ等で削除するときは後ろから削除していかないとうまくいきません

Sub RemoveRow() '-その行を削除するか Dim IsRemove As Boolean '-行の走査 For Row = 30 To 6 Step -1 IsRemove = False '-列の走査 For Col = 1 To 26 '-列に値があればループを抜けて行を削除する、無ければ走査を続ける If Cells(Row, Col) <> "" Then IsRemove = True Exit For End If Next Col '-その行を削除する If IsRemove Then Cells(Row, 1).EntireRow.Delete End If Next Row End Sub

みたいな感じですか?

というか

ExcelのA6〜Z30くらいの範囲で、何か値が入っていたら削除してからコピーをしたいです

がセルの値クリアで構わなければ、該当するセルに値が入っているか判断する必要も無いのでは

Sub ClearCell() Range("A6:Z30").ClearContents End Sub

聞くときには、消去(Clear)したいのか、削除(Delete)したいのか、はちゃんと伝わるようにした方がいいです
ClearとDeleteは全く別の機能なので..

投稿2016/06/21 18:56

編集2016/06/21 19:04
dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

機能的になのですが、順番が、削除→コピーにしたい理由はなにかあるのでしょうか。
もし、コピー→削除で問題がなければ、一度Excelのマクロの記録で記録したコードを見てみるとよいと思います。
ある範囲に文字が入っていたら削除ということは、文字が入っていなくても入っていても動作的には同じになるかと思いますが、いかがでしょうか。

投稿2016/06/21 16:27

yosatonet

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

セルの左上の位置が決まっているならそこが空かどうかを調べてクリアすればいいのでは?
CurrentRegionというのを使うといい感じに選んでくれます。

こんな感じかな・・・

If (Range("A6") <> "") Then Range("A6").CurrentRegion.Clear End If

クリアの仕方はいろいろあるので、以下の参考ページ等みてください。

参考ページ
http://kabu-macro.com/word/a-z/currentregion.html
http://excelvba.pc-users.net/fol2/2_6.html

投稿2016/06/21 16:25

Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問