いつも参考にしています。まだ、マクロの記録にチョット手を加えて自動化?している程度の腕前ですが?
仕事の都合で下記の問題を解決しなくてはならなくなり、皆様のお知恵をお借りしたいと思い質問させて頂きます。
エクセルのワークシートに空白のセルがランダムに入っているデータがあります。これを、ある列まで(例ではD列までの左の空白セルをなくして左づめのデータとしたいのです。
(例)
| A | B | C | D | E |
1|AAA|BBB|CCC|DDD|EEE|
2| |BBB|CCC|DDD|EEE|
3|AAA| |CCC|DDD|EEE|
4|AAA| |CCC| |EEE|
5| | | |DDD|EEE|
↓
| A | B | C | D | E |
1|AAA|BBB|CCC|DDD|EEE|
2|BBB|CCC|DDD| |EEE|
3|AAA|CCC|DDD| |EEE|
4|AAA|CCC| | |EEE|
5|DDD| | | |EEE|
ここで、E列以降は詰めないでほしいのです。
できれば、VBAで実現したいのですが、どのような考えで、どのようなコード?を書けばよいのか教えてください。
質問の仕方も用途を得ないで、失礼な質問になっていると思いますが、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
こんにちは。
VBAの方法もいろいろあると思いますから、以下もちょって見てください。ただし、定数に限ります。
Sub Value2Left()
Dim myAr As Variant
Dim myAr2() As Variant
Dim i As Long, j As Long, k As Long
With Range("A1").CurrentRegion.Resize(, 4) 'D列まで
myAr = .Value
' .ClearContents
ReDim myAr2(1 To UBound(myAr, 1), 1 To UBound(myAr, 2))
For i = 1 To UBound(myAr, 1)
For j = 1 To UBound(myAr, 2)
If myAr(i, j) <> "" Then
k = k + 1
myAr2(i, k) = myAr(i, j)
End If
Next j
k = 0
Next i
Application.ScreenUpdating = False
.Value = myAr2
Application.ScreenUpdating = True
End With
End Sub
丁寧な回答ありがとうございます。
VBAってホントに色々な考え方があるのですね。
内容が分からないまま、単純に貼り付けて実行しましたら、できました。しかも、早い!感激&涙!きっと説明して頂いても現在の私の知識レベルでは理解できないような気がします。
今後、VBAの勉強に精進してみます。
こんな気持ちにして頂けた皆様に感謝いたします。
本当にありがとうございました。
また、何かとご厄介になると思いますが暖かく見守ってください。よろしくお願いします。
No.3
- 回答日時:
>仕事の都合で下記の問題を解決しなくてはならなくなり・・・
>VBAで実現したい
VBA自体の回答を求めているのであれば以下を無視してください。
E列先頭にアクティブセルの領域の最大行数(この場合であれば5つ)のセルを挿入します。
元のアクティブセルの領域(この場合であればA1:E5)またはE列を除いた領域(A1:D5)を選択して編集>ジャンプから空白セルを選択します。
編集>削除を選択して「左に詰める」を行った後、E列を元に戻します〔5つのセルを削除して上に詰める)。
VBAでも簡単に作れると思います(ただし、簡単な操作はVBAにしなくても操作できるような小技を身につけておくと何かと役立ちます)。
早速の回答ありがとうございました。
今回は、これ以外の処理もある都合から、VBAで行う事を考えました。
たしかに、簡単な操作をVBAで行うより小技で処理するのが正解だと思います。今回は、私だけじゃなく他の人も操作する可能性があるので、こんな事を考えました。説明不足でごめんなさい。
でも、この小技は凄く参考になりました。別の機会に使いたいと思います。
また、色々とご指導ください。本当にありがとうございました。
No.2
- 回答日時:
取り込み方次第で同一シートで行うことも可能ですが説明しにくい
こと、元データには手を加えない方がよいと思いますので、シート
1つでの解決よりも、データシート、結果シートに分けての考え方
で説明します。
データシート上のA-D列までの各セルをFor文でまわしながら空白
列の判定(ISBLANK)を行い、結果シート上に左詰めになるよう転記
していきます。
(空白行の判定はISBLANKでなく、無効値での判定でも構いません)
データシートE列以降は結果シートE列以降に転記するだけです。
これをデータの入っている行分繰り返すことで可能です。
早速の回答ありがとうございました。
確かに、元データを変えてしまうのは良くありませんよね。
今回は、システムの都合上(システムってほどのものじゃないのですが・・・)転記をするよりワークシート内で詰めていった方が都合がよいのです。説明が悪くて済みませんでした。
また、色々とご指導ください。
本当にありがとうございました。
No.1
- 回答日時:
下記のような感じでもよろしいかと・・・。
Sub test()
Dim i As Long
Dim j As Long
For i = Range("E65536").End(xlUp).Row To 1 Step -1
For j = Range("D1").End(xlToRight).Column To 1 Step -1
If Cells(i, j).Value = "" Then
Cells(i, j).Delete Shift:=xlToLeft
Range("D" & i).Insert Shift:=xlToRight
End If
Next j
Next i
End Sub
早速の回答、ありがとうございました。
”すっ”凄~い!感激です。VBAって奥が深いんですね。自分には無理と諦めていたんですが、再度勉強してみようかな!なんて思ってしまいました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
excelのデータで色つき行の抽出...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
エクセルで特定の文字列が入っ...
-
EXCEL VBA マクロ 別シートの...
-
Excel グラフのプロットからデ...
-
エクセルVBAのEntireRow.Hidden...
-
excel 小さすぎて見えないセル...
-
EXCELのVBAで空白列を削除して...
-
エクセルで昨日までの日付デー...
-
Excel:いまフォーカスがあるセ...
-
エクセル マクロで数値が変っ...
-
アクティブになっている行をマ...
-
エクセルのマクロで意図しない...
-
結合されたセルをプルダウンの...
-
【エクセル】自動で、同じ内容...
-
エクセルのセルに指定画像(.jpg...
-
【マクロ】book1からbook2への...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
エクセルで特定の文字列が入っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
【Excel関数】UNIQUE関数で"0"...
-
特定の文字がある行以外を削除...
-
Excel グラフのプロットからデ...
-
excelのデータで色つき行の抽出...
-
AのセルとB行を比較して、一致...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
VBAで色の付いているセルの行削除
-
excel 小さすぎて見えないセル...
-
A1に入力された文字列と同じ文...
-
罫線の斜線を自動で引くマクロ
-
アクティブになっている行をマ...
-
エクセル2016で時間を入力して...
-
EXCELマクロを使い、空白行では...
-
エクセルマクロで偶数行(又は...
-
セルの色によって条件文をつけ...
おすすめ情報