• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:列に見た目で データがなければ列ごと削除する方)

見た目でデータの表示がなければ列を削除する方法

kagakusukiの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

>参照H,I,J列に参照結果がない例でマクロ実行した場合。 >2列分削除される。どの列が削除されたかは分かりません。 >K列が備考欄だったものが、I列が備考欄になりました。 >参照H列のみに参照結果がある例でマクロ実行した場合。 >1列分削除される。どの列が削除されたかは分かりません。 >H列の参照結果がある列は残っています。 >K列が備考欄だったものが、J列が備考欄になりました。 >参照H、I列に参照結果がある例でマクロ実行した場合。 >1列分削除される。 >H,I列の参照結果がある列は残っています。 >K列が備考欄だったものが、J列が備考欄になりました。 >参照H,I,J列に参照結果がある例でマクロ実行した場合。 >削除される列はない。 >H,I,J列は残っています。  申し訳御座いません。確認の仕方が甘かった様です。  改良致しましたので下記のVBAをお試し下さい。 Sub QNo8990454_列に見た目でデータがなければ列ごと削除する_改() Dim c As Range, myRows As Long, myRange As String myRange = "H4:J4" With ActiveSheet myRows = .Range("A" & Rows.Count).End(xlUp).Row - Range("A4").Row + 1 If myRows < 0 Then MsgBox "データが見つかりませんでしたので処理を行う事が出来ません。" _ & vbCrLf & "マクロを終了します。", vbExclamation, "データ無し" Exit Sub End If For Each c In .Range(myRange) If c.Formula = "" Then c.Formula = "=""""" With Application.WorksheetFunction If .CountIf(c.Resize(myRows, 1), "*?") + .Count(c.Resize(myRows, 1)) _ - .CountIf(c.Resize(myRows, 1), 0) = 0 Then c.ClearContents End With Next c On Error Resume Next .Range(myRange).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete On Error GoTo 0 For Each c In .Range(myRange) If c.Formula = "=""""" Then c.Formula = "" Next c End With End Sub

関連するQ&A

  • EXCEL 関数の設定について

    教えてください。 sheet1 を参照する以下の式を設定したのですが =IF(ISNA(HLOOKUP(A2,sheet1!A$1:AM$5,4,FALSE)), "",(HLOOKUP(A2,sheet1!A$1:AM$5,4,FALSE))) 検索値:A2 範囲:sheet1のA1からAM5 行:4行目 sheet1の4行目に何も記入がない場合、 5行目の記入を持ってくるように更に設定したい場合、 どうすればいいですか? 宜しくお願いします。

  • 配列数式について教えてください

    ここでエクセルでの文字列の検索方法をさがしていたらさきほど、ちょうど良くこのような配列数式をみつけました。 =IF(A1="","",MIN(IF(ISNA(MATCH("*"&$H$1:$H$9,A1,0)),10,$I$1:$I$9))) A1セルに、H1からH9の表にあるどれかの文字列を含んだ文字列をいれると対応するI1からI9の表の値を表示するものです。 使われているMINやISNAやMATCH関数はわかるつもりですが、組み合わせるとなんでこんなことができるのか、ぜんぜんわかりません。どなたか解説していただけないでしょうか? http://oshiete1.goo.ne.jp/kotaeru.php3?q=653775

  • B列の値を参照して、A列に連番を振る方法

    A・B・C列があり、A列には連番を、B列にはVLOOKUP関数が入っており、 C列には、B列の検索値が入っております。 B列は下記のVBAコードで同じ値をセル結合させています。 Sub 結合() Dim rngU As Range Dim i As Range Dim rngB As Range Dim Key As String Set rngB = Range("B2") Set rngU = Range(Range("B3") _ , Range("B6000").End(xlUp).Offset(1)) Application.DisplayAlerts = False For Each i In rngU If Not i.Text = Key Then If (Not i.Offset(-1) Is rngB) And _ (Not i Is rngB) Then Range(rngB, i.Offset(-1)).MergeCells = True End If Set rngB = i End If Key = i.Text Next i Application.DisplayAlerts = True End Sub そこで、A:3から連番を振りたいのですが、B列の決まった特定の結合セルの 隣のA列のセルもB列の決まった特定の結合セルと同数にセル結合させ、 連番を1つとしてカウントしたいのです。 また、A列にはB列同様にVLOOKUP関数が入っており、連番を振りたくないセルには 印が付くようにしています。 行数やB列の決まった特定の結合セル番地はランダムに変わるため、B列の結合セルで参照させるしか ないのかなっと思っております。 B列の特定の結合セルの値は決まっております。 上記のような処理を自動にさせるためのVBAが分かる方がいらっしゃいましたら、 是非ご教授お願いいたします。

  • EXCELのVLOOKUPとHLOOKUPについて

    どうしてもわからないので、よろしくお願いします。 (1)VLOOKUPやHLOOKUPで、例えば =IF($B18="","",VLOOKUP($B18,$H$18:$J$29,2,FALSE)) という数式があるとします。 範囲のところ($H$18:$J$29)を絶対参照にするのは分かるのですが、検索値のところ($B18)がどうして列固定になるのかがわかりません。どういったときに、検索値が列固定になるのでしょうか? (2)あと、FALSEとTRUEの違いがどうテキストを読んでもいまいちわかりません。 試験前なので、焦っております。。 よろしくお願いします!

  • IF関数:複数条件、ISNA、VLOOK

    関数初心者です。 =IF(ISNA(VLOOKUP(検索値,範囲,列番号,FALSE)),"",VLOOKUP(検索値,範囲,列番号,FALSE)) あるセル(例:A1セル)が1以上で上記の答えを出す。という関数を作りたいのですが、うまくいきません。 どなたかわかる方がいらっしゃったら、回答お願いします。

  • Excel2007でCOUNTIFS前ゼロ否定条件

    Excel2007 のCOUNTIFS関数での否定条件の 指定方法について教えてください。 VBAのマクロの中で  (略)  For i = 1 to 10    Cells(i, "B").Formula = "=COUNTIFS(" & "A1:A10, $C$" & i & ")"  Next i   のような形で COUNTIFSを利用しています。    COUNTIFSの条件に <>を使って否定条件を指定したいのですが、以下の  ように期待した動作になりません。     例   A      B       C        D            1 '080  一般品    <>'080      =COUNTIFS(A1:A5,C1)  2 '020  一般品    <>一般品  =COUNTIFS(B1:B5,C2) 3 '040  一般品 4 '060   特別品  5 '080    一般品  セルC1の記述を変えた結果は以下の通りです。       C1      D1      備考 1)  <>'080   5    3 が入ってほしい。 2)  <>080   5    ' の有無で結果は変わらず。     '(シングルクォーテーション)は接頭辞で上記結果には無関係と理解。 3)  "<>'080"   0    "<>'080" 全体を条件値として認識してしまう。 4)  '080      2   当然 5)  <='060    3   当然   ちなみに C2に <>一般品 と条件を設定すると D2には1と期待通りの値が入ります。  1)2) の結果から A列に記述されている'080と セルC1の式に書か  れた '080 が、なぜか別の値と評価され 結果 D1が 5 となっていると理解しています。 A列のシングルクォーテーションは削除、A列の書式を文字列とし 文字列"080"とIF関数で比較すると以下の結果でした。   A    B     B列の式            1 080   FALSE  IF(A1<>"080",TRUE,FALSE)   2 020   TRUE IF(A2<>"080",TRUE,FALSE) 3 040   TRUE IF(A3<>"080",TRUE,FALSE) 4 060    TRUE  IF(A4<>"080",TRUE,FALSE) 5 080    FALSE IF(A5<>"080",TRUE,FALSE)   Excelの「数式」メニュー -「ワークシート分析」-「数式の検証」で C1セルに <>'080 、<>080、"<>'080" 、<='060 を指定した時、それぞれ 1) COUNTIFS(A1:A5,"<>'080")   2) COUNTIFS(A1:A5,"<>080")   3) COUNTIFS(A1:A5,"""<>'080""") 5) COUNTIFS(A1:A5,"<='060")  と評価されています。   また VBAのテクニックを解説するWebなどでは、"<>"と値'080を& でつなげる方法も紹介されていましたが、上記の場合結局 COUNTIFS(A1:A5,"<>080") → 5 と評価されて  しまいます。      文字列同士で比較すれば、期待する結果になりそうですが 条件の書き方には工夫がいりそうです。どのように記述すればよいでしょうか   お知恵をお借りしたくいと思います。どうかよろしくお願い致します。 以上

  • エクセルの参照セルがずれないようにしたい!

    エクセルの参照セルがずれないようにしたい! sheet1のC列にデータを入力しており、sheet2には A1に =IF(ISERROR(FINDB("○○",sheet1!C1,1))=FALSE,"△△","××") A2に =IF(ISERROR(FINDB("○○",sheet1!C2,1))=FALSE,"△△","××") A3に =IF(ISERROR(FINDB("○○",sheet1!C3,1))=FALSE,"△△","××") ・ ・ ・ ・ ・ ・ ・ ・ と、計算式を入れています。 sheet1で行の挿入をすると、sheet2の計算式が何故かずれてしまいます。「shhet1!C1,1のところの行番号」 これをずれないようにするにはどうしたらよいのでしょうか? =IF(ISERROR(FINDB("○○",Indirect(sheet1!C1),1))=FALSE,"△△","××")としても行番号はずれるし、期待する結果(sheet1のC列に○○という文字があればsheet2にA列に△△と表示したい。)が返ってきません。 説明が下手でわかりづらいとは思いますが、ご回答よろしくお願いします。

  • vlookup関数について

    vlookup関数について教えてください。    A       B         C      D      E        1  あじ    りんご     2  さば    みかん            3  さんま   ばなな        という内容で、D1セルに入力した内容に応じてE1セルに内容を転記させていました。 E1=VLOOKUP(D1$A$1$B3,2,FALSE) 上記で運用していたときはうまくいったのですが、 Cの列にも文字をいれ、E1セルにはCの内容を検索して、B列の内容を転記したいと 思って作りかえるとうまくいきません。 今回の新しいやり方では、 ・A列からの検索はいらない(でも他ファイルから参照されているので、削除、移動はできない) ・E1=VLOOKUP(D1$A$1$C2,2,FALSE)では #N/A となる ・A列からの検索がいらないから、E1=VLOOKUP(D1$B1$C2,1,FALSE) でも #N/A 調べてみたのですがわからなくて・・・ どこがおかしいのか、教えてください。宜しくお願いします。

  • エクセル 複数列を検索し左3列目を返す

    よろしくお願いします。 シート1の5列(E,J,O,T,Y)の中から,該当するセルを検索,該当セルの左隣3列目のセルを返す関数を考えています。検索条件の重複はありません。 検索結果を表示するシートをシート1とは別に作成します。 A列に検索条件を入力し,B列に結果を返したいです。 例シート1   A  B   C   D   E    F  G   H    I     J   ・・・・・   ID 品名 項目 単価 1年目 ID2 2品名 2項目 3単価 2年目 ・・・・・ 1 1  a   b   c    1-1   e    f    g   h   1-11 2 2  i    j   k     2-2  m    n    o   p   2-22  検索結果   A   B 1 1-1  a 2 2-22  n このような感じのファイルになっています。IFやLOOKUPなどを試しましたが,複数列をうまく検索する関数を作成することができませんでした。 また,検索対象となるシートが複数になる可能性もあり,その際にも対応できるとありがたいです。 よろしくお願いいたします。

  • エクセルで計算の結果がある数値の場合のみ文字列を表示させたいです・・・。

    エクセルで計算の結果がある数値の場合のみ文字列を表示させたいのですが、IF関数を使うのかなと思いますが関数がよく解かりません。。。 やりたいことはこんな感じです。 セルG1にはA1-B1、H1にはC1-D1、I1にはE1-F1と計算式が入っています。 計算の結果、▲1になるセルだけを文字列『売上』と表示させたいのですが・・・。 なお、計算の結果は、必ず『1』か『▲1』のどちらかにしかなりません。 つたない質問ですが解決したく困っています。よろしくお願いします。