プロが教えるわが家の防犯対策術!

エクセルで。
例えば、100行の表があって、1行目から順番にデータを入れていくんですが、
データが50行までで終わってしまった場合に、51行目からを、非表示にしたいのです。
Aドライブからのデータの読み込みは、マクロをつかっているので、できればそのあとに文章をくっつけて、1つのマクロで作業を完了したいのです。
具体的に言いますと・・・
A列には1~100までの数字が入力してあります。
B~E列には取り込んだデータ(数字)をVLOOK関数で文字に変換するようになってます。
それ以降は、固定した単位(m3)や、データの数字がそのまま入る・・・という感じです。
そして、101行目はそれぞれの列の合計を出すようにしてます。
つまり、データを読み込んだあと、例えば50行しかデータが無かったら(B50やC50などが空白だったら)、51行目から100行目までをいわゆる『表示しない』にしたいのです。
だいぶ考えましたが・・・・。
よろしくお願いします。

A 回答 (3件)

質問内容からすると、B~E列は100行目までVLookUpの算式が入っているような気がしますので、その前提でのマクロです。

データを読み込んだ後、データの数分の算式を書き込んでいれば別の話になってしまいますが。
100行目が入力ありの時、100行目からEnd(xlUp)を行うと1行目を返したりするはずなので上から順に逐一調べています。1行目も使用している前提です。
また、質問の意味からは途中には見た目空白の行はないように思えますが、途中行のB列のVLookUpの帰り値が長さ0の文字列(""です)の行は非表示にしてしまいます。
ご参考に。

Sub rowHidden()
  Const DataRowMax = 100 'データの最終行
  Dim rw As Integer '行カウンタ

  Application.ScreenUpdating = False '画面更新をストップ
  For rw = 1 To DataRowMax
    Rows(rw).Hidden = False '一旦表示にする
    If Cells(rw, 2).Text = "" Then
      Rows(rw).Hidden = True '非表示にする
    End If
  Next
  Application.ScreenUpdating = True '画面更新
End Sub
    • good
    • 3
この回答へのお礼

うまくいきました。
周りの誰に聞いてもわからなかったことなのに、さすがnishi6さん!!!
先に回答いただいたお二人には、ワタクシの質問の仕方が悪く、本当に申し訳なかったです。
多分お二人とも、すごく詳しい方たちなんでしょうねえ。
nishi6さんに回答をいただくのは3回目だから、多分ワタクシのレベルがおわかりになっておられて、わかりにくい質問でも、意味が通じたのでしょう。
ただ、こういう質問を文章で書くのって本当に難しいです。
また、質問させて下さい。ありがとうございました。

お礼日時:2001/10/24 19:16

pc-cadさんこんにちは


こんな感じでしょうか

Sub SAMPLE()
Dim usedCellCount As Integer
'↓B列に何行目まで入力されているかを取得
usedCellCount = Range(Cells(100, 2).End(xlUp).Address).Row
'↓100行目まで入力されていたらhiddenを実行しない
If usedCellCount = 100 Then Exit Sub
'↓入力されている次の行から100行目までを非表示
Rows(usedCellCount + 1 & ":100").Hidden = True
End Sub

注意事項として、すべての行のHiddenのプロパティを一度Falseにして
(一旦すべての行を表示して)この処理を行った方がよいでしょう。
EXCEL2000 Win98seにて動作確認
    • good
    • 0
この回答へのお礼

ありがとうございます。
せっかく教えていただいたのですが、思う通りにいきませんでした。
動作確認までしていただいたのに・・・。
ワタクシの説明のしかたが悪かったのだと思います。
ご好意感謝いたします。

お礼日時:2001/10/24 19:05

こんにちは。

maruru01です。
オートフィルタを使うのはどうでしょう。
コードはこんな感じです。
1行目に項目があるとして、A102には"合計"という文字が入っているとします。

  Range("A1:E102").Select
  Selection.AutoFilter
  'とりあえずB列にフィルタをかけて、空白以外を抽出
  Selection.AutoFilter Field:=2, Criteria1:="<>"
  'A列にフィルタをかけて、A列の値<=50と合計のみ抽出
  Selection.AutoFilter Field:=1, Criteria1:="<=50", Operator:=xlOr, Criteria2:="=合計"

フィルタをかけるのは、どちらか一方だけにして下さい。
参考になりましたら、幸いです。
です。
    • good
    • 1
この回答へのお礼

ありがとうございます。
せっかく教えていただいたのですが、思う通りにいきませんでした。
ワタクシの説明のしかたが悪かったのだと思います。
ご好意感謝いたします。

お礼日時:2001/10/24 19:03

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

このQ&Aを見た人はこんなQ&Aも見ています