人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

下記のようなエクセルがあります。
品物名の文字数が5文字以上ある場合は、
自動的に行が送られる(セルにスペースが入るようにしたい)です。


このようなエクセルデータがあります。
A B C
品物名 仕入れ 価格
みかん 340円 440円
パイナップル 240円 340円
オレンジ 140円 240円
マンゴスチン 540円 740円
梨 140円 240円
バナナ 110円 135円


これを品物名が5文字以上の場合は、
品物名の行のBとCにスペースを
さらに下にスペースを入れて整形したいです。

A B C
品物名 仕入れ 価格
みかん 340円 440円
パイナップル
240円 340円
オレンジ 140円 240円
マンゴスチン
540円 740円
梨 140円 240円
バナナ 110円 135円

マクロ等でできますでしょうか?
どうぞよろしくお願いいたします。

●質問者: ohtsu6
●カテゴリ:コンピュータ
✍キーワード:みかん エクセル オレンジ セル データ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●200ポイント

下記のようでどうでしょうか。

Sub formatting5()
 Dim lastRow As Long
 lastRow = Cells(Rows.Count, "A").End(xlUp).Row
 Dim i As Long
 For i = lastRow To 2 Step -1
 If Len(Cells(i, "A").Value) >= 5 Then
 Rows(i).Insert
 Cells(i, "A").Value = Cells(i + 1, "A").Value
 Cells(i + 1, "A").Value = ""
 End If
 Next
End Sub
◎質問者からの返答

出来ました。

どうもありがとうございます。


2 ● かえる
●200ポイント

別のシートに整形した表を作成する方法です。

以下の式をSheet2のa1に入れます。

=IF(COLUMN()=1,IF(ROW()<=2,Sheet1!A1,IF(LEN(OFFSET(A$1,ROW()-2,0,1,1))>=5,"",OFFSET(Sheet1!A$1,COUNTA(OFFSET(A$1,0,0,ROW()-1,1))-COUNTBLANK(OFFSET(A$1,0,0,ROW()-1,1)),0,1,1))),IF(LEN($A1)>=5,"",OFFSET(Sheet1!A$1,COUNTA(OFFSET($A$1,0,0,ROW(),1))-COUNTBLANK(OFFSET($A$1,0,0,ROW(),1))-1,0,1,1)))

そして、c9までコピペしますとできあがり。

◎質問者からの返答

どうもありがとうございます。

できました。


3 ● jccrh1
●250ポイント

以下の対応でできると思います。

Sub 行下げ()
 For I = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
 If Len(Cells(I, 1)) >= 5 And Len(Cells(I, 2)) + Len(Cells(I, 3)) >= 1 Then
 Cells(I + 1, 1).Insert Shift:=xlDown
 Cells(I, 2).Insert Shift:=xlDown
 Cells(I, 3).Insert Shift:=xlDown
 End If
 Next I
End Sub

注)間違って、複数回実行しても大丈夫のように対応しています。

◎質問者からの返答

出来ました。

複数回の件どうもありがとうございます。

どうもありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ