dポイントプレゼントキャンペーン実施中!

エクセルマクロを使用しての行削除の方法についてお伺いします。

現在業務でエクセルに画像内の文字データを入力しています。
入力データは列ごとに半角全角のきまりがあり、
データが入力された行列以外はすべて削除しそれをCSVで保存という流れになっているのですが、
今のところ関数を入れて半角全角チェックをし、それが済んだあとに、
実際のデータ部分以外の箇所をすべて削除し保存しています。

調べたら半角全角はvbNarrowとvbWideという関数があると知り、
列については、特定位置から始まるのでマクロの記録で対応できています(列項目は予め数が決まっていますので)。
ただ、行については画像にどれだけデータがあるかで開始位置が変わってきます。

***以下は試したマクロ記録です。***
Rows("9:9").Select→何も知らずに「"9:9"」の所で"開始位置の変数:開始位置の変数"としエラーで迷ってます。
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Columns("F:F").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Delete Shift:=xlToLeft

不特定の行から最終行までを選択削除する方法をご存じの方がいましたらご教授お願いいたします。

上記のマクロ使用環境はExcel2003です。

A 回答 (1件)

>vbNarrowとvbWideという関数があると


ありません。それはStrConvに渡す定数
です。正規表現で調べるか、文字数と
バイト数の違いで判断します。

Declare Function lstrlenA Lib "KERNEL32" _
  (ByVal 文字列 As String) As Long
Function 文字種判定(ByVal 文字列) As Long
Dim 文字数 As Long
Dim バイト数 As Long
文字数 = Len(文字列)
バイト数 = lstrlenA(文字列)
If 文字数 = バイト数 Then
    文字種判定 = 0 '★全部半角の戻り値
ElseIf 文字数 * 2 = バイト数 Then
    文字種判定 = 1 '★全部全角の戻り値
Else
    文字種判定 = 2 '★全角半角混在の戻り値
End If
End Function

ターゲットにデフォルトを使わず、明示的に
指定するべきです。また、直定数の使用は
避ける方が良いでしょう。

Dim シート As WorkSheet
Dim 開始行 As Long
Dim 最終行 As Long
Dim 削除列 As Long

'★シートを設定する
Set シート = ThisWorkbook.WorkShets("Sheet1")
開始行 = 9 '★ここは何らかの方法で決める
'★最終行を求める
最終行 = シート.Cells.SpecialCells(xlCellTypeLastCell).Row
'★開始行から最終行までを削除
シート.Rows(Cstr(開始行) & ":" & cstr(最終行)).Delete
'★特定の列を削除
削除列 = 6 '★ここは何らかの方法で決める
シート.Columns(削除列).Delete
    • good
    • 0
この回答へのお礼

アドバイスの返事が遅れてすいません。

行削除ですが、教えていただいた方法で試してみます。
最終行を求める方法も参考になりましたので、活用させていただきます。

お礼日時:2011/06/12 21:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!