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

このQ&Aに関連する最新のQ&A

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
    • 2
この回答へのお礼

うまくいきました。
周りの誰に聞いてもわからなかったことなのに、さすが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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテーブルリンク エクセルの4行目を先頭行にしたい

エクセルのデータをアクセスにテーブルリンクしたいのですが
エクセルの先頭行が4行目から始まります。
なおかつA1に文字が入ります。
(画像参照)

このエクセルデータをアクセスの
「テーブルのリンク」→ファイルを選ぶ
→ワークシートリンクウィザードが表示され、次のページに進み、
「先頭行をフィールド名として使う」にチェックを入れたいのですが、先頭行は4行目です。

この場合、どうすればエクセルの4行目を
アクセスのテーブルリンクの先頭行にできるのでしょうか?

エクセルのA1の文字を消去すれば自動的に4行目がアクセスで先頭行になりますが
エクセルの方は決まったフォーマットなのでA1の文字を消去することはできません。

ご回答よろしくお願いします。

Aベストアンサー

#1です

Excel ファイル側に手を入れられるのなら、#2さんの方がお勧めです。

なお、範囲名部分が行方向に増えるのなら、(Excel側で範囲を再設定)
何もせずに Access 側から変更を含めて値を得ることが出来るようですが、
列方向に範囲が広がった場合、 リンクの更新(RefreshLink)が必要みたいです。

嘘を言ってるかも知れないので、裏取りはしっかりとしてください。

Q例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA

例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA-Gさん別々に出したいんですが簡単なvbaの記述方法はないでしょうか?
お願いします。

Aベストアンサー

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
With Range(wS.Cells(2, "B"), wS.Cells(lastRow, "B"))
.Formula = "=SUMIF(Sheet1!A:A,A2,Sheet1!B:B)"
.Value = .Value
End With
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A...続きを読む

Qエクセルで、条件を指定した行数のカウントについて

エクセルにて、条件に合致する行数のカウントを行うことは出来ますでしょうか。

添付画像のようなエクセルファイルにて、各日毎に「AAA」を含む行は何行あり、「BBB」を含む行は何行あるかをカウントしたいです。

添付のエクセルであれば、A列が「10月1日」でB列に「AAA」を含む行は○行という条件でカントが出来れば実現可能とは思いますが、
こういったカウントの仕方がそもそもエクセルで出来るのかどうか知りたいです。

もし、エクセル以外の方法で可能なのであれば、その方法も教えていただけるとありがたいです。

Aベストアンサー

SUMPRODUCT関数などを使った場合にはデータ数が多くなった場合には計算が重くなります。
作業列を使った方法がよいでしょう。
お示しのデータがシート1に有るとしてC列を作業列としてC2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(A1="","",IF(COUNTIF(B1,"AAA*"),A1&"AAA",IF(COUNTIF(B1,"BBB*"),A1&"BBB","")))

次にお望みの表を別のシートに表示させるとしたら別のpシートのB1セルにはAAAと入力しC1セルにはBBBと入力します。
A2セルから下方には例えば10月1日からの日付を入力します。
B2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。

=IF($A2="","",COUNTIF(Sheet1!$C:$C,$A2&B$1))

Q10行目が見出しです。 E列11行目から下方にデータが無ければ データがありません。のメッセージが出

10行目が見出しです。
E列11行目から下方にデータが無ければ
データがありません。のメッセージが出てマクロ終了。
一つでも入っていたらマクロ続行。
と、いうマクロを教えてください。
よろしくお願いします。
エクセル2013

Aベストアンサー

こんにちは!

今行っている処理の前に↓の4行のコードを追加してみてはどうでしょうか?

If Cells(Rows.Count, "E").End(xlUp).Row = 10 Then
MsgBox "データなし"
Exit Sub
End If

Qテキストファイルから必要な項目(行)をエクセルの行に移行させるには

テキストファイルから必要な項目(行)をエクセルの行に移行させる簡単な方法を教えて下さい。
1テキスト=エクセルの1行

Aベストアンサー

コピーアンドペーストでうまくいく気がします。
テキストファイルを、ノートパッドなどで開いて、全文をコピーし、エクセルに貼り付けるだけです。エクセルは、左上端のセル一つだけが選択された状態にしておきます。複数のセルを選択しているとサイズが合わないと文句を言われるかもしれません。

QExcelで、自列に数字がる行の左端列の数字を加えるには?

下表で、左端は行番号、最上行は列名で、-は空白セルを表しています。
例えば、(1)=40行のGには、G列に数字がある行のF列の数字を足す式を求めています。

+FGHI
719--
81---
951--
102-5
110--5
121---

40(1)(2)  (3)

(1)=G40=1+5
(2)=H40=2
(3)=I40=0
なお、スペースが詰まった表示になりますが、Excel表をここで表示する方法があればそれも教えて下さい。以上

Aベストアンサー

40行目のG列のセル、H列のセル、I列のセルに
それぞれの列の1~39行の間で"-"以外の値が入っている行のF列のセルの値の合計を表示する方法を知りたい
という質問でよろしいでしょうか?
合計を求める際に条件をつけることのできるSUMIF関数というものがあります。
SUMIF関数には3つの引数があり、1つ目の引数には条件をつける範囲、2つ目の引数にはその条件を、3つ目の引数には合計を求める範囲を渡して使用します。
例えば今回の場合、G40には=SUMIF(G1:G39,"<>-",F1:F39)が入ります。

Qエクセルの行の幅について

 エクセルの行幅を立ち上げ時点から太くしたいと思います。
 エクセルの行の幅は、立ち上げると12.75という高さになっているようです。しかし、これでは少々見づらいので15くらいにしたいと思います。
 もちろん、「行の高さ」で変更できるのは分かるのですが、毎回、修正するのが煩雑です。従って、立ち上げた初期段階から行の高さを変更することはできないでしょうか。

Aベストアンサー

う~ん。

確か、エクセルの初期設定で変更できるのは、
「シート数」「フォントの書体」「フォントの大きさ」
くらいだったと思います。
行の幅を、立ち上げ時から指定の幅にする事は出来なかったような…。

私自身、エクセルを結構利用するのですが、行の幅を変更するときは、
「全選択(画面左上の行(1)の上、と列(A)の左、の長方形の部分をクリック)」して、
行(1)と、行(2)の間にある線をドラッグして一気に全ての行の幅を変えています。

もし、それすらも煩雑と感じるほどにエクセルを新規で立ち上げているのであれば、
以下の方法はどうでしょうか?

1.行の幅を15に設定した「白紙のエクセル」をデスクトップに保存する。
2.新規で利用したい場合は、1で保存したエクセルをデスクトップ上でコピー(Ctrl + C)&ペースト(Ctrl + V)
3.ペーストしたエクセル(白紙で行幅15)を立ち上げる。

こうすれば、毎回行幅を変更する事なく、立ち上げ時から行幅15のエクセルが使用できますよ♪

ただ、全選択して一気に行幅を変える前者のやり方の方が簡単な気もしますが…。(汗

う~ん。

確か、エクセルの初期設定で変更できるのは、
「シート数」「フォントの書体」「フォントの大きさ」
くらいだったと思います。
行の幅を、立ち上げ時から指定の幅にする事は出来なかったような…。

私自身、エクセルを結構利用するのですが、行の幅を変更するときは、
「全選択(画面左上の行(1)の上、と列(A)の左、の長方形の部分をクリック)」して、
行(1)と、行(2)の間にある線をドラッグして一気に全ての行の幅を変えています。

もし、それすらも煩雑と感じるほどにエクセルを新規で立...続きを読む

Q行のデータ(a列b列c列)をd列に表示したい

a1、b1、c1のセルに入力したデータをd1セルに表示したい。可能でしょうか。一例「a1セルに1と入力、b1セルに2と入力、c1セルに3と入力しd1セルに123と表示する」

Aベストアンサー

d1セルに =a1&b1&c1

エクセルですよね?

Qエクセルの行の幅がずれる

エクセルで表を作っているのですが
行の高さを25にして確かめてみると
どうしても24.5というように25の幅になっていません。
どうすればきっちり自分の設定した行の高さになるのでしょうか教えてください。
エクセルは2000を使っています。

Aベストアンサー

セルの高さの単位はなんでしょう?
ポイントという単位なのですが、1ポイントは約0.35mmでポイントは文字の大きさの単位と同じです。エクセルでは11ポイントの場合標準の高さが13.5、14ポイントでは17.5と変化します。
エクセルの標準フォントの高さを基準にしています。(これはオプションで変更できます。)

ピクセルと言う基準があって、これをポイントと言う単位に直しているので、25と言う端数のない数値にならない事がある。

例えば、幅はどうでしょう、これは標準フォントの文字数を表しています。(規定があるのですが省略)

と言う事で、出来ません。
25の右にあるピクセルと言う単位を基本に使うようにしたらいかがでしょう。
例えば列幅とも100ピクセルを選択するとセルは正方形になります。(ピクセルは列幅とも同じ物です。)
この併記はエクセル2000から始まったようですが。(単位が違うので、合わせるためみたいです。)

Qエクセルの関数です。一列目で指定した値の間で、二列目で指定した値を示す、一列目の最初の値を求める。

エクセルの関数です。
一列目で指定した値の間で、二列目で指定した値を示す、一列目の最初の値を求める関数を教えてください。
添付した図で、具体的に説明します。
A列に値(時間)、B列に値があります。
この配列の中から、
F4の値(時間)と同じ値(時間)を示すA列の行から、F5の値(時間)と同じ値(時間)を示すA列の行までの中で、
F3の値と同じ値がB列にある、A列の値(時間)の内、
A列で上から最初の値(時間)
です。

min、offset、index、match を組み合わせてみるのですが、うまくいきません。
どうぞよろしくお願いします。

Aベストアンサー

こんにちは!

画像の配置でF6セルに「7」という結果が返れば良い訳ですかね?

少し長くなりますが、
=INDEX(INDIRECT("A"&MATCH(F4,A:A,0)&":A"&MATCH(F5,A:A,0)),MATCH(F3,INDIRECT("B"&MATCH(F4,A:A,0)&":B"&MATCH(F5,A:A,0)),0))
という数式を入れてみてください。

※ F3セルは質問に載っていないので余計なお世話かもしれませんが
同じようなやり方で
=MAX(INDIRECT("B"&MATCH(F1,A:A,0)&":B"&MATCH(F2,A:A,0)))
という数式になると思います。

※ エラー処理はしていません。m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報