• ベストアンサー

Excel文字セルを詰める

Excelで決まった枠がありセルに文字がバラバラに打ち込まれており空白セルを無視して文字セルを上から詰めたいのですがどなたかVBAが解る方よろしくお願いします。因みにwindows2007 offise2003です。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に Sub Test()   Dim retu As Range, c As Range, i As Long, j As Long   For Each retu In Range("B4:E13").Columns     i = 3: j = 15     For Each c In retu.Cells       If c.Value <> "" Then         i = i + 1         Cells(i, c.Column).Offset(, 6).Value = c.Value       End If       If c.Offset(12).Value <> "" Then         j = j + 1         Cells(j, c.Column).Offset(, 6).Value = c.Offset(12).Value       End If     Next   Next End Sub

kuma0220
質問者

お礼

ありがとうございます。大変勉強になり助かりました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

各セルを繰り返し法で、空白か判別する方法(ロジック)を思いつきやすいが、 Excelでは、空白セルを選択する操作がある。したがってVBAでもそれが使える。 こういうのを使うと、VBAのコードは少なくて済む場合が多い。 Sub test02() rngs = Array("a1:A10", "C1:C10", "F1:F10") ’10はバラバラでも良い For Each Rng In rngs Worksheets("Sheet1").Range(Rng).Copy Worksheets("Sheet2").Range(Rng) Worksheets("Sheet2").Select Range(Rng).Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Delete (xlShiftUp) Next End Sub ーー 例データ Sheet1 A,C,F列1-10行 aa rr dd ss ttt fff ggg dd hh hhhh ff hhhj jj eee ff dd ーー 実行結果 Sheet2のA,C,F列 aa dd rr ss fff ttt dd hh ggg ff jj hhhh dd ff hhhj eee

kuma0220
質問者

お礼

ありがとうございます。勉強になりました。

  • kkkkkm
  • ベストアンサー率65% (1605/2442)
回答No.3

No2の補足です。 Dim mRow As Long, mColumn As Long は不要でした。 また、別の個所に結果を出したい場合 mRange = mData2 を(添付図例のように右に6列移動したところへ出す場合) mRange.Offset(0, 6) = mData2 としてください。

kuma0220
質問者

お礼

ありがとうございます。

  • kkkkkm
  • ベストアンサー率65% (1605/2442)
回答No.2

範囲が例の範囲だと考えて2箇所分です。 Exampleを実行して下さい。 Sub Example() Call mSet(Range("B4:E14")) Call mSet(Range("B16:E26")) End Sub Function mSet(mRange As Range) Dim mData As Variant, mData2 As Variant Dim mRow As Long, mColumn As Long Dim c As Long, r As Long, r2 As Long mData = mRange ReDim mData2(1 To UBound(mData), 1 To UBound(mData, 2)) For c = 1 To UBound(mData, 2) r2 = 1 For r = 1 To UBound(mData) If mData(r, c) <> "" Then mData2(r2, c) = mData(r, c) r2 = r2 + 1 End If Next Next mRange = mData2 End Function

kuma0220
質問者

お礼

ありがとうございます。勉強になります。

関連するQ&A

  • セルの文字を消したい

    WIN XP エクセルです セルに文字が入っています(印刷されます) その文字を消したいのですが消えないのですが・・・ デリートキー等は無効 空白セルを入れると消えます (しかし印刷時に当然無駄な空白な紙が出てしまいます) 未表示のセルがあるのかと思い全部表示にしても何処に文字が入ったいる状態なのか解りません 当然文字の上にマウスを置いても通常文字がそこにあれば上の数式が表示されるまどにも表示されるのですが表示されません 以上の状態です 宜しくお願い致します

  • エクセルで文字最終行の空白セルへ移動

    エクセル2000です。 1000行内で間にとびとび(順不同)に空白セル、他は文字有りです。 (1000行目は文字あり) シートが10個あり、各シートともばらばら(ウィンドー枠固定位置)ですが、ウィンドー枠固定内の行に「最終行へ移動」のボタンを設け、いずれの行からも、最終文字入力の次の行空白セル(AからZ列のいずれか)へ移動したいです。 方法がありますでしょうか? VBAの場合、素人につきVBAへの入力方法等も一緒にお願いします。またVBAの場合、ソフトを立ち上げたら直ぐに実行できるようにしたいです。(立ち上がり時のマクロ警告はあり) よろしくお願いいたします。

  • VBAでセル内の文字列を一行にする方法

    ExcelのVBAで、セル内に折り返しで3行に書かれている文字列を、各文字列間に空白を1つ入れて、1行につなげるにはどうしたらいいですか

  • Excelで一つのセル内の文字縦位置微調整

    例えば一つのセルの高さを4分割したイメージで 上から順に 2/4 → 空白 1/4 → 文字 1/4 → 空白 こんな感じで文字を収めたいのですが、VBAか何かで出来るでしょうか? ご教授よろしくお願いいたします。

  • セル内で文字が折り返されてしまう(EXCEL2003)

    今回の場合は、WORDで書いた文字を コピーしてEXCELのセルに貼り付けたところ 1つのセル内に折り返されて表示されてしまいます。 セル幅を手動で広げればいいのですが、 今回は、新規で入力したときのように、隣のセルにはみ出る形にしたいと思っています。 (ちなみに手動での列幅は広げるのはできますが ダブルクリックの自動調整もききません。) そういうものなんでしょうか? いくつかありますので、WORDで書かれた文字をEXCELに貼り付け られるのが理想なのですが・・・。 隣のセルにはみ出した形の表示に変更するにはどうしたらいいでしょうか? セル→配置タブのところはみてみたのですがわかりません。 よろしくお願いします。

  • セル内文字を切取りその行範囲の列の空白セルに貼付

    B列3行目から添付のようにセル内にカンマを含む文字がありカンマで区切った文字ごとに切り取り矢印右のように同B列の次の空白行に順に貼り付けたく、その際カンマは削除したいです。また等間隔の名前の行がある中で枠内の空白に文字を張付けたく等間隔行数枠が多くてできればVBAコードがお分かりなる方宜しくお願いします。 環境はwindows7 office2013です。

  • セル内の文字が切れてしまう(Excel)

    Excelのセル内に文字を入力し、文字全てを表示したいのですが、隣のセルに掛かると文字が見えなくなります。折り返しや縮小、セルのサイズ変更をしないで(複数のセルにまたっがって)文字を全て表示するのにはどうすればいいのでしょうか。  新規セルに文字を入力すると、上記のような問題は起こらないのですが・・・。原因等もわかりましたら教えて下さい。

  • VBA 文字が入力されているセルを表示させたい

    ExcelのVBAで 列番号"A列"に文字を適当に打った時 文字が入っている最終セル(行番号)と その最終セルに入っている文字を "C1"のセルに表示させる というVBAを作成したいのですガ… どなたかわかる方教えて下さい 自分が考えたものはVBAが妙に長くなってしまい; Excelのバージョンが2000と古いので 古いのでも動くVBAだと助かります; 宜しくお願いします

  • エクセルのセルに入力中の文字

    以前、XPの時にはエクセルのセルにも入力中の文字が表示されていましたが、7にしたら入力中の文字や数字は上の数式の表示の枠にしか出なくなりました。何とかセル内に出す方法があったら教えてください。

  • 【Excel】 文字が入力されたら他のセルを空白に

    こんにちは J3からJ127までの範囲で、 このセルの中に文字を入れたら、 他の範囲を空白にする方法を教えて下さい。 一度だけではなく、何度も繰り返されます。 J3に入力すると、他のセルは空白になり、 またJ5に入力すると、先ほど入力したJ3が空白になる といった感じです。 Excel2007です。 宜しくお願いいたします。

専門家に質問してみよう