グッドデザイン賞を受賞したウォーターサーバー >>

エクセルです。 空白のセルがあるので上方向に詰めたいのですが、よい操作方法ありますか? この場合はVBAを使用したほうが良いですか?

ctrl+Gで空白行を削除できるのは知っているのですが、
行を削除すると困るのでそれ以外の方法を探してます。


A1   A1
×   ×   
    × 
×   × 

× 

上のように、上方向へ詰めたいのです。

A 回答 (6件)

×印の下のセルで右クリック→削除→上方向へシフト



でできますよ。

この回答への補足

うまくいかないです。

範囲指定して、右クリック、削除、上方向へシフト

すると、範囲指定したところが削除されていまいました。
○×も消えてしまいました。

どうしてだろう。???

補足日時:2003/08/28 15:34
    • good
    • 0

A1列をキーにして、データ並べ替えをすると、A1が空白の行が、先頭か最後に集まります。



もし現状の行の順番を変えたくなければ、列を挿入し、そこに1~の連番を入れた後、A1列をキーにして、データ並べ替えをします。
次に、A1列が空白の行を削除し、残りを行番号で並べ替えをします。
最後に、行番号の列を削除する、ということでできます。
    • good
    • 0
この回答へのお礼

こちらにまとめてお礼を記入させていただきます。
おかげさまで、うまくできました。またVBAは今後の参考にしたいと思います

ありがとうございました。

お礼日時:2003/08/28 16:39

VBAならこんな感じでいかがでしょう?


Sheet1のA列にデータがあるとして、とりあえずB列に空白をつめた状態で表示します。
データ最終行を100としてますが適当に直してください。B列がまずければ Cells(n, "B") のBをXでもYでも好きな列に変えてください。


Sub test()
Dim i As Integer, n As Integer
n = 1

With Sheets("Sheet1")

For i = 1 To 100
If .Cells(i, "A") <> "" Then
.Cells(n, "B") = .Cells(i, "A")
n = n + 1
End If

Next
End With

End Sub
    • good
    • 0

>範囲指定して、右クリック、削除、上方向へシフト



>すると、範囲指定したところが削除されていまいました。
>○×も消えてしまいました。

消すところだけ、範囲指定をしないと全部消えてしまいます。
そういう機能なので…。

一度に全部というのでしたら複数範囲指定(Ctrlを使う)か、#2や#3の方の方法の方がいいと思います。
    • good
    • 0

> ctrl+Gで空白行を削除できるのは知っているのですが、


> 行を削除すると困るのでそれ以外の方法を探してます。

A列を選択して、ctrl + G で空白セルを選んで
削除すればよいかと。
    • good
    • 0

VBAを使用したほうがいいと思います。

この回答への補足

VBAの場合はどんな記述になるか、ご存知でしょうか?

補足日時:2003/08/28 15:37
    • good
    • 1

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

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

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

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

QExcelの空白行を上に詰めるVBAについて

Excelにて特定の列のみの空白を上に詰めるVBAを組んだのですが、
全ての列に適用してしまって困っております。

Sub 空白を上に詰める()
Dim Lrow, i As Long
Dim myRange As Range
Lrow = Range("AH65536").End(xlUp).Row
Set myRange = Rows(Lrow + 1)
For i = 1 To Lrow
If Cells(i, 34) = "" Then
Set myRange = Union(myRange, Rows(i))
End If
Next i
myRange.Delete
End Sub

上記のように「AH」列にのみ適用するように組みましたが、
うまくいきません。

VBAは初心者レベルです。
VBAにお詳しい方のご意見をお聞かせ願えますでしょうか。
宜しくお願い致しますm(_ _)m

Aベストアンサー

ざっとコードを拝見したところでは、
> Set myRange = Rows(Lrow + 1)
ここで、行番号Lrow+1の行全部のセルをmyRangeに格納し、
> Set myRange = Union(myRange, Rows(i))
ここで、行番号iの行全部のセルとmyRangeとをUnionしています。

AH列のみの適用にするのなら、これらを
Set myRange = Cells(Lrow + 1, 34)
Set myRange = Union(myRange, Cells(i, 34))
にすると上手くいくはずです。


ご参考までに、定義部分で
> Dim Lrow, i As Long
は、
Dim Lrow As Long, i As Long
としたほうがいいですよ。

> Dim Lrow, i As Long
ですと、LrowがVariant型で定義されてしまうんです。

QEXCELで空白行を詰めるには

WindowsXP Excel2000 です。

下の図の「表1」を「表2」の様にしたいのですが
Excelの基本操作だけで出来るでしょうか?

やりたい事は以下の通りです。
(1)空白行は削除する
(2)ダブっている行を削除する


(表1)
+====+=======+=======+====
| | A | B |・・
+====+=======+=======+====
| 1 | 1011 | xxxxx |
+----+-------+-------+----
| 2 | | |
+----+-------+-------+----
| 3 | | |
+----+-------+-------+----
| 4 | 1011 | xxxxx |
+----+-------+-------+----
| 5 | | |
+----+-------+-------+----
| 6 | 1012 | yyyyy |
+----+-------+-------+----
| 7 | | |
+----+-------+-------+----
| 8 | 1012 | yyyyy |
+----+-------+-------+----

↓ ↓ ↓

(表2)
+====+=======+=======+====
| | A | B |・・
+====+=======+=======+====
| 1 | 1011 | xxxxx |
+----+-------+-------+----
| 2 | 1012 | yyyyy |
+----+-------+-------+----

[注]表は等幅フォントで見てください。
以上よろしくお願いします。

WindowsXP Excel2000 です。

下の図の「表1」を「表2」の様にしたいのですが
Excelの基本操作だけで出来るでしょうか?

やりたい事は以下の通りです。
(1)空白行は削除する
(2)ダブっている行を削除する


(表1)
+====+=======+=======+====
| | A | B |・・
+====+=======+=======+====
| 1 | 1011 | xxxxx |
+----+-------+-------+----
| 2 | | |
+----+-------+-------+----
| 3 | | |
+----+-------+-------+----
| 4 | 1011 | x...続きを読む

Aベストアンサー

方法1
1行目にタイトルを追加
A B
別の空いている列で
A
>0
と入力
「データ」「フィルタ」「フィルタオプションの設定」で
リスト範囲をA,B列
検索条件範囲を先ほどタイトルと条件を入れた2セルにして
「重複するレコードは無視する」にチェックしてOK
A B
1011 xxxxx
1012 yyyyy
の表示になるのでコピーして別のシートに貼り付ける

方法2
1行目にタイトルを追加
A B C
C2=COUNTIF($A$2:$A2,$A2)
として最終行までコピー、A,B,C列を選択して
「データ」「フィルタ」「オートフィルタ」
C1の▼を押して1を選択
A B C
1011 xxxxx 1
1012 yyyyy 1
の表示になるのでA,B列をコピーして別のシートに貼り付ける

方法3
1行目にタイトルを追加
A B
「データ」「ピボットテーブル」で行にA B、データにAを設定して完了
データの個数 : A
AB計
1011 xxxxx 2
1011 計2
1012 yyyyy 2
1012 計2
(空白)(空白)
(空白) 計
総計4
になるので計の行を右クリックで「表示しない」にする。
A,Bの列をコピーして別シートに値として貼り付け

方法1
1行目にタイトルを追加
A B
別の空いている列で
A
>0
と入力
「データ」「フィルタ」「フィルタオプションの設定」で
リスト範囲をA,B列
検索条件範囲を先ほどタイトルと条件を入れた2セルにして
「重複するレコードは無視する」にチェックしてOK
A B
1011 xxxxx
1012 yyyyy
の表示になるのでコピーして別のシートに貼り付ける

方法2
1行目にタイトルを追加
A B C
C2=COUNTIF($A$2:$A2,$A2)
として最終行までコピー、A,B,C列を選択して
「データ」「フィルタ」「オートフィルタ」
...続きを読む

QEXCEL関数 空白セルを詰める関数

図1の表を図2のようにオートフィルタを使わず表示させる関数で下記を見つけましたが、実際使うときには、番地がA1からの位置ではなくAA60ぐらいの位置でこの関数を実行すると表示されません。
どの部分をその番地にあわせるとよいでしょうか?

<図1>
    A     B
1   あいう
2         えお
3   かきく
4         けこ
5   さしす

<図2>各行の空白セルを詰めて表示させる
    A     B    
10  あいう   えお
11  かきく   けこ
12  さしす
13
14

【関数】

A10: =IF(ROW(A1)>COUNTA(A$1:A$5),"",INDEX(A$1:A$5,SMALL(IF(A$1:A$5<>"",ROW($A$1:$A$5),""),ROW(A1))))

Ctrl + Shift + Enterキーで式を確定します。

右と下にコピーします。

Aベストアンサー

元データがA60から始まっているとすると,

A10に
=IF(ROW(A1)>COUNTA(A$60:A$65),"",INDEX(A$60:A$65,SMALL(IF(A$60:A$65<>"",ROW($A$1:$A$6),""),ROW(A1))))
をコントロールキーとシフトキーを押しながらEnter,下にコピー,右にコピー と直す格好になりますね。




#好みの問題ですが
=IF(ROW(A1)>COUNTA(A$60:A$65),"",INDEX(A:A,SMALL(IF(A$60:A$65<>"",ROW(A$60:A$65),""),ROW(A1))))
をCtrl+Shift+Enterの方が,判りやすいと思います。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセルのマクロで、選択範囲の空白行を削除する方法

タイトルの通りですが、エクセルのマクロを使って、選択範囲にデータの入っていない空白行を削除するマクロを作りたいのですが、うまく行きません。
(空白行の判定は、1つの列だけで、O.K.です。)
どなたか、詳しい方、アドバイスお願いします。

Aベストアンサー

こういうやり方もあります。

選択範囲が1~100行で、空白行の判定をA列で行っていますので適宜修正してください。

Sub TestMacro()
Dim i As Integer
For i = 1 To 100
If Sheets("Sheet1").Cells(i, "A") = "" Then
Sheets("Sheet1").Rows(i).Select
Selection.Delete Shift:=xlUp
End If
Next i
End Sub

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?


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

人気Q&Aランキング