• ベストアンサー

エクセルVBA Columnプロパティで・・・

エクセル2002使用です。 FindメソッドでRangeオブジェクトを取得し、Columnプロパティでそのオブジェクトの列番号をを取得し、Columnsプロパティーでその列番号が最後になる複数行を取得して、その取得した範囲の空白セルを削除しようとしています。 Dim findcell as Range Dim cl as String Set findcell = Rows(1).Find(What:="賞") cl = findcell.Column Columns(3:cl).SpecialCell(xlCellTypeBlanks).Delete Columns(3:cl)でエラーとなってしまいます。 Columnsプロパティーで複数行を取得するときは、アルファベットの列番号を指定しなければならないと思うのですが、Columnプロパティーでは、数字で列番号を取得してしまうため困っています。 Columnプロパティーでアルファベットを取得する方法 または Columnsプロパティーで複数行を数字の列番号で取得する方法で何か良い方法はありますでしょうか? よろしくお願いします。

  • ken123
  • お礼率73% (299/409)

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんな感じだとどうでしょう? Sub test() Dim findcell As Range Dim cl As Integer Set findcell = Rows(1).Find(What:="賞") cl = findcell.Column With ActiveSheet   .Range(.Cells(1, 3), .Cells(65536, cl)). _   SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft End With End Sub あと、意味が違うかも知れませんが、、 'シートの使用範囲で空白を左詰め Sub Test1()  ActiveSheet.UsedRange. _   SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft End Sub '1行目だけ空白を左詰め Sub Test2()  With ActiveSheet.UsedRange   .Resize(1, .Columns.Count). _   SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft  End With End Sub

ken123
質問者

お礼

papayuka様、早速のお返事ありがとうございました。 万事うまくいきました。その上、その他のアドバイスまでいただき本当にありがとうございます。 大変助かりました。 以前にも関数が入った空白セルの取得でお世話になり本当に助かりました。 経験が浅くなかなか初歩的なところが解決できず申し訳ございません。がんばって勉強します。 今後ともよろしくお願いいたします。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

シンプルにやるならループさせるとか。 Set findcell = Rows(1).Find(What:="賞") cl = findcell.Column for i=cl to 3 step - 1  Columns(i).delete next i

ken123
質問者

お礼

popesyu 様、いつも早速のお返事ありがとうございます。本当に助かっています。 今回の空白セルは、列のすべてを削除することはできず、列から検索した特定の行の空白セルのみの削除でした。 本当にいつもありがとうございます。なんとか、初めての製作物もなんとかゴールが見えてきました。 今後ともよろしくお願い申し上げます。

関連するQ&A

  • VBA Target.ColumnをRangeへ

    Excel VBAについてお尋ねいたします。 Excel VBAにて現在選択しているセルの列番号をTarget.Columnで取得することが出来ますが、Target.Columnで取得した列番号(数字)をRange方式のアルファベットに変換する方法はございますでしょうか? Range形式のアルファベットに変換してから、セルに=○○という数式を出力させたいです。 選択する列は、N列~右端までの間です。 取得した列番号を26で割って26で割って26で割って…を繰り返して、商と余でアルファベットを形成するという方法を考えましたが、その場合でもどうやって記述すればいいですか?

  • エクセルVBA・空白セルのある列を非表示にするには?

    エクセルのVBAについてです! 表で上から2行目(G2:CX2)に空欄があった場合、その列を非表示にする、 というマクロを組みたくて、以下のように書いてみました。 一応、ちゃんと動くのですが、止まる(結果が出る)までにやたらと時間がかかり、これでは使えません。。 本を見ながら何となく書いたので、自身では詳しくわかりません。 どこ(何)がおかしくて、どう書き換えたらよいか、お分かりになる方、ぜひ教えてください! よろしくお願い致します。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub 空欄のある列を非表示にする() Dim cl As Range Range("G2:CX2").SpecialCells(xlCellTypeBlanks).Select For Each cl In Selection r = cl.Column 'MsgBox r Columns(r).EntireColumn.Hidden = True Next End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

  • VBA Excelのセル検索

    VBAで以下の要領でセルの検索をしています。 ------------------------------------------- dim getCell As String dim inputStr As String Windows("ExcelBook.xls").Activate Sheets("sheet1").Select inputStr = "58" getCell = Columns("C").Find(inputStr) ------------------------------------------- C列にある文字列を検索して、該当するセルの行番号を取得したいのですが、その検索する「文字列」は数字なんです(0~9000までで重複しません)。 上の方法で実行すると、inputStrに代入した数字をgetCellが持ってしまうのですが・・・ 色々考えているのですが分かりません。 どなたか教えて頂けませんか?よろしくお願いします。

  • Excel2013VBA列選択の拡大

    ExcelVBA2013です。 列の取得でつまづいております。 お手数ですが、ご教授下さい。 下記のコードで選択範囲のコピー貼り付けは出来ていますが、列幅がコピーされていませんでした。 CC3のセルを基準にOffsetとResizeで範囲拡大してコピーしているためだと思います。 CC3の左隣のAX3:CB3はセル結合されています(○月)。(その下の4行目は日付の1~31が入力) 列は、今回はAX3:CC3まで(1月分)取得できればよいです。(可変します) MaxCol = Range("J5").End(xlToRight).Column  で列取得できます。 行の位置は、MaxRow = Range("I5").End(xlDown).Row  で取得した値です。 それで、列全体を取得しようと、 MaxCol = Columns(MaxCol).Select で最終列は取得できましたが、そこから列選択の拡大ができればと思っています。 現在は、AX3:CC237まで取得コピーして、隣の列に貼り付けで列幅が違う。 希望はAX:CCまでの列を取得選択コピーして貼り付け。 Sub SAMPLE() Dim MaxRow As Variant, MaxCol As Variant Dim r As Range, c As Range MaxRow = Range("I5").End(xlDown).Row '最終行番号 MaxCol = Range("J5").End(xlToRight).Column '最終列番号 Set c = Cells(3, Cells(3, Columns.Count).End(xlToLeft).Column) '表の右上角のセル番地を取得 c.Select c.Offset(0, -31).Resize(MaxRow - 2, 32).Copy c.Offset(0, 1) '表右上から1月分選択範囲拡大してコピー隣の列より貼りつけ End Sub

  • マクロFind検索で見つからなかった時の対処

    エクセル2013です 以下のコードを作成しましたが .Rowが色で塗られ 「型が違います」でERRになります。 .Columnの方はERRでなく なぜ.Rowの方がERRなのでしょうか? よろしくお願いします。 Dim 検索行番号 As Range Dim 判定列番号 As Range Dim 検索列番号1 As Range Dim 検索列番号2 As Range Set 検索行番号 = Rows(1).Find("みかん").Column If 検索行番号 Is Nothing Then MsgBox "みかんが有りません。" End If Exit Sub Set 判定列番号 = Rows(1).Find("りんご").Column If 判定列番号 Is Nothing Then MsgBox "りんごが有りません。" End If Exit Sub Set 検索列番号1 = Range("B:B").Find("大箱").Row If 検索列番号1 Is Nothing Then MsgBox "大箱が有りません。" End If Exit Sub Set 検索列番号2 = Range("B:B").Find("小箱").Row If 検索列番号2 Is Nothing Then MsgBox "小箱が有りません。" End If Exit Sub

  • VBAで時刻で検索をしたいのですが

    VBA全くの初心者です。 時刻が入力されているB列で、例えば、 19:**のデータが入っているセルが、何行目にあるか、を知りたいと思っています。**としているのは、複数のファイルを扱うため、分(**)の値が特定できないからです。 Find を使い、 Dim n As Integer n = Range("B:B").Find("12:").Row で、12時台の行は取得できました。。 ところが、13時以降は、うまくいきません。 どのようにすればよいのでしょうか。。 初心者のため、質問の仕方も、うまくなくてすみません。。 どなたかお教えくださいましたら、とてもありがたいです。。

  • VBAのSelectionプロパティについて。

    単語を分類するプロシージャを作成しています。 ソースは下記の通りです。 Private Sub Distribute() Dim NumRows(100) As Long 'wsRDの行列 インデックス番号は列を示す Dim NumColumns As Long 'wsRDの行列 Dim Flag As Boolean '品詞が存在するかを示すフラグ Dim fName As String 'ファイル名 Dim Row As Long 'wsRDの行 Dim Word As Long 'wsのキーワード <<中略>> '読み込まれたファイルのワークシート1のアドレスを代入 '//列Aから列Fの範囲にについて情報をキーとして昇順に並べ替え開始 wsData.Columns("A:F").Select '範囲指定 Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal '//列Akara列Fの範囲にについて情報をキーとして昇順に並べ替え終了 <<中略>> End Sub Selection.Sort Key1の部分でエラーが出てきてしまいます(エラー1004:アプリケーション定義またはオブジェクト定義エラー)。 今現在、Exsel2000を使用しているのですが、プログラムを書く際は2002の本を参照しています。そのためバージョンが違う所為かとも思っているのですが・・・。 もしわかる方がいたら教えてください。

  • エクセルVBA FindNextについて

    エクセル2002使用です。 VBAのFindNextメソッドについて教えていただけますでようか?不定期の行ごとに存在する○から△までの表を抽出するために次のようなコードをつくりました。   A  B  C  D 1 ○ × × 2 × × × 3 △ × × 4 5 ○ × × 6 × × × 7 △ × × Sub 表の抜き出し() Dim myr1 as range Dim myr2 as range Dim firstmyr1 as String Set myr1 = Columns("A").Find(What:="○") firstmyr1 =myr1.adress Set myr2 = Columns("A").Find(What:="△") Do  処理・・・・ Set myr1 = Columns("A").FindNext(after:=myr1) Set myr2 = Columns("A").FindNext(after:=myr2) Loop until myr1.adress = firstmyr1 End Sub 上記のようなコードで、処理の後のSetステートメントでFindNextを使うと、A5の○とA7の△を見つけてほしいのに、1回目の処理・・・の後の読み込みでウオッチで見るとmyr1値が△になってしまって2回目の読み込みにいけません。Setステートメントが2つ以上あるときのFindNextメソッドの使い方で何か注意点があるのでしょうか? よろしくお願いします。

  • エクセル VBA で列番号を足す方法は?

    こんにちは。大変お世話になっています。 Set btd = Range("d2:z2").Find(bmd) といったVBAを使用し、あるセル番地を抜き出しました。 そのセルの列番号のみを抜き出して、そこから列番号を右へいくつか動かしたいのですが、その方法がわかりません。 別の定義で出した行をgとして Cells(g, btd.Column)でセルの指定をしました。 このセルがa1だとします。 次の作業として、b1のセルを指定したいのですが、その方法がわからないのです。 b=Cells(g, btd.Column) と定義して、 b.Offset(0, 1).Value などと書いてもエラーになってしまいます。 行番号なら数字を足したり引いたりすればできたのですが、アルファベットの列番号の場合はどうしたら良いのでしょうか? すみませんがよろしくお願いします。

  • Excel VBA オートフィルの範囲指定

    Excel VBA で関数を入れたセルを最下行までコピー させたいのですが、範囲の指定がうまくできません。ごちゃごちゃ書きすぎて、よくわからなくなってしまいました。 実行してみたら、オートフィルのところでデバッグが出ました。 VBAはまだまだ初心者レベルです・・・ どこをどう直せばきちんと処理されるのか、どなたかお知恵をお貸しください。 (それと初めの定義は、Rangeで合ってるのでしょうか?) Sub sample() Dim MyCell1 As Range Dim MyCell2 As Range Dim MyCell3 As Range Dim MyCell4 As Range Dim MyCell5 As Range Set MyCell1 = Cells(5, Range("4:4").Find(what:="○○", searchorder:=xlByColumns).Offset(1, 1).Column) Set MyCell2 = Cells(5, MyCell1.Offset(0, 2).Column) MyCell1.Select Selection.Formula = "=$A5-" & MyCell2.Address(False, True) Set MyCell3 = Cells(5, MyCell1.Offset(0, -1).Column) Set MyCell4 = Cells(5, Cells(5, Columns.Count).End(xlToLeft).Column) Set MyCell5 = MyCell1.Offset(0, 1) MyCell5.Select Selection.Formula = "=" & MyCell3.Address(False, True) & "-" & MyCell4.Address(False, True) Range(MyCell1, Cells(5, MyCell1.Offset(0, 1).Column)).Select Selection.AutoFill Destination:=Cells(Cells(5, MyCell1.Column), Cells(Cells(Rows.Count, 1).End(xlUp).Row, MyCell5.Column)), Type:=xlFillCopy End Sub ********************* 下のような表に関数を入力して最下行までコピーさせたいです。  | A | B | C | D | E | F | G | H | I | J | K | L | -------------------------------------------------------------------------- 4 | code | name | 7/1 | 7/2 | ○○ |    |    | code|name| 7/1 | 7/2| ○○ | 5 |10000|aaaaaa| 15  | 20 | 35  |     |    |10001|bbbbbb| 13 | 25 | 38 |                           ((                            )) F5に "=$A5-$H5" と数式を入れてcodeを比較し、G5に "=$E5-$I5"と入れて数量を比較する。 F列とG列の入力されている最下行まで数式をコピーする。 ※毎月日数が変わり、商品数も変わるので、A列・B列・4行目以外は全て可変。 WindowsXP Excel2003 です。 よろしくお願いいたします。

専門家に質問してみよう