
Excel2003を使用しています。
あるテキストファイルから必要なデータを抽出し、予めExcelで作成してある表に、抽出したデータをコピーするという作業をマクロで処理しています。
Excelの表は、A列→4桁の番号(数値)、C列→文字列、D列→数値で、A列の番号順(昇順)に表示されています。
抽出されたデータは、2行目以下に表示されるので、まず、A2セルに『0000』、C2セルとD2セルにそれぞれ該当のデータがコピーされ、以下、順番にコピーされます。このA2セル『0000』の行データをコピーされたデータの一番最後にもっていき、下記のように上方向へシフトさせたいのですが、このようなことはコードを追加することで可能でしょうか?
A列 C列 D列
2 0000 あ 100
3 1200 い 200
4 1500 う 300
↓
2 1200 い 200
3 1500 う 300
4 0000 あ 100
データ元のテキストファイルは、会社で使用しているシステムの機能を使って、テキストファイルにしたものです。このデータが昇順で表示されているので、こちらを並べ替えてマクロを実行すればいいかと思ったのですが、数値と文字列が混在しているので、Excelの表にコピーした後(数値と文字列の混在がなくなった後)に、上記のように並び替えることができればと思い、質問させていただきました。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんばんは。
私は、どうもご趣旨が、まだ良く分かっていないので、オオボケしているのかもしれませんが、マクロで書けば以下のようなことではないでしょうか?つまり、0の文字列化を施せば済むと思うのですが、そういうことではないでしょうか?それで、元に戻すなら、マクロで、rng.Value = rng.Value とすれば戻ります。
Sub TestZero2Text()
Dim rng As Range
Dim c As Range
Set rng = Range("A1", Range("A65536").End(xlUp))
'0 の文字列化
For Each c In rng
If Not IsEmpty(c) And c.Value = 0 Then
c.Value = "'" & Format$(0, "0000")
End If
Next c
rng.Resize(, 4).CurrentRegion.Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal
'0の数値化
rng.Value = rng.Value
Set rng = Nothing
End Sub
Wendy02 さん、こんにちは。
お礼が遅くなり、申し訳ありません。
>0の文字列化を施せば済むと思うのですが、そういうことではないでしょうか?
0が最初にならないようにすれば済む話なのですね。
どうも頭が固くていけません(^_^;)
教えていただいたコードで試してみたところ、D列の数値がソートされなかったのですが、アドバイスをいただいていましたので、自分で処理できました。
ありがとうございました。
No.5
- 回答日時:
したいことの全貌が良く見えない。
文章表現で考える気があるなら
下記の点を補足してみてください。
ーー
一番判らないのが
1行だけの話か
「最初の行を最後の行にまわす」、でよいのかな。
余分なことが沢山書いてあるが、この1行で済むのでは。文章表現に気をつけてください。そうでないなら、肝心な点の表現不足と思います。
ーー
それより最初の行は第2行目に決まりですか?
最終行は、質問の一部から察すると、その下に別のデータが続くのか。同判別するのか。
ーー
プログラムロジックは
<行削除ーシフト法>
(1)最初の行のデータをを退避する。
(2)最初の行を行削除
(3)最終行に行挿入、
(4)退避データをセット
では都合が悪いのか。
ーー
<シフトさせない法>
または最初の行を記憶して、シートに書き込まない
次から普通にコピー(書き込み)
最後に最初の行のデータを書き出す
こういうのは都合が悪いのか。
ーーー
>テキストファイルから必要なデータを抽出し
システム担当がやったのか、質問者がやるのか。書かなくても質問に影響ないと思うが、後者なら、質問者の自由度ガ高まるから聞く。
ーー
>抽出したデータをコピーするという
「コピー」しているのか。「代入」がお勧め。テキストファイルは値しかないので(書式やその他情報なし)、値の代入で十分。スピードも落ちると思う。多数のセルに一遍に張り付けできないようだからなおさら。一遍にActivesheet.Pasteができるなら良いが。
ーー
>2行目以下に表示されるので
質問者が表示するのではないの。
>このデータが昇順で表示されているので
どこ列か書かないのはおかしい。
ーー
質問ではソート(並べ替え)のような標題をつけているが、そういうパターンでは処理するものでなさそうだ。
本当に修正キーでも作ってやはりソートしなければならないのかな。
並べ替えはエクセル等の術語なので俗な意味で並べ替えを使わぬようにしたほうが良い。読者をミスリードするとおもう。
分かりにくい質問文で申し訳ありません。
幸い今回は他の方からいただいた回答・アドバイスで、無事解決しました。
細かいところまでアドバイスいただきまして、ありがとうございました。
No.4
- 回答日時:
一番シンプルなロジックとしては、#3 ご回答のようにソートした際に
末尾に来てほしいものを「そうなるように置換」してしまえば良いだけ
です。例えば、
0000 ---> ZZZZ
と置換し、ソート実行後に逆置換して元に戻す...です。
KenKen_SP さん、こんにちは。
お礼が遅くなり申し訳ありません。
>末尾に来てほしいものを「そうなるように置換」してしまえば良いだけ
なるほど~!0000のデータが末尾に来るように置換してしまえば良かったのですね。
恥ずかしながら、そのような考えには全く至りませんでした(^_^;)
アドバイスいただいたように、「そうなるように置換」して、ソート実行後に逆置換して元に戻すという方法で解決しました。
ありがとうございました。
No.1
- 回答日時:
A列の『0000』が入力された行の前に、行挿入をした上で、順次、項目を追加していくような処理にすれば、実現できそうですが・・・。
この回答への補足
アドバイスありがとうございます。
>行挿入をした上で、順次、項目を追加していくような処理
Excelへのデータコピー(マクロ)は、予め作成されている表に値のみをコピーするので、行を挿入したりするとレイアウトが崩れるような気がするのですが…。
あと、表には数式が入力されている列もあるので、その辺も気になるところです。
やはり、このようなことは難しいですかね。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
エクセルで1列に500行並んだデ...
-
Countifよりも早く重複数をカウ...
-
excel:別シートの値を飛び飛び...
-
VBA 数式を最終行までコピー
-
エクセルで、重複データを除外...
-
複数の条件に合う行番号を取得...
-
Excelの30個ずつの平均値の出し方
-
差し込み印刷 «Next Record»に...
-
Excelで社員の本名をニックネー...
-
重複するデータの一部だけを抽...
-
エクセルの行の作り方
-
エクセルVBA C列に特定の文字列...
-
Excel VBA 【QueryTables.Add】...
-
エクセルで2つ以上のリスト比...
-
【エクセル】1列内に複数ある同...
-
エクセルで横並びの複数データ...
-
Excelで2つのデータの突合せを...
-
エクセル2016にて、行挿入&コピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
Countifよりも早く重複数をカウ...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Excelの30個ずつの平均値の出し方
-
不要な行を消したい
-
VBA 数式を最終行までコピー
-
エクセルで横並びの複数データ...
-
エクセルVBA C列に特定の文字列...
-
エクセルで1つの会社名に対して...
-
エクセル~空白のセルのある行...
-
【Excel】小計単位で並べ替えを...
-
エクセルで重複データを削除す...
-
500行の中から、多い順に抽出す...
-
EXCELである範囲内での最大値の...
-
VBA 大きなtxtテキストファ...
-
重複するデータの一部だけを抽...
おすすめ情報