[[20180907131433]] 『表をリストに変換する方法』(かんがえすぎ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『表をリストに変換する方法』(かんがえすぎ)

Excel操作の質問です。

たとえば100行x10列の表があったとして、
これをA列だけに一直線に並べたい場合、
どのように操作するのが簡単だと思いますか?

具体的な例は無いです。
データの状態や求める並び順によって使える方法/使えない方法があるかもしれませんが、
こういうデータならこういう操作が良いよ!っていうのを上げていただければと思います。

一番ストレートな力技は、
B1:B100を切り取り→A101に貼り付け、
C1:C100を切り取り→A201に貼り付け、
以下略

もうちょっと効率化すると、並び順が列順ではなくなるが、
F1:J100を切り取り→A101に貼り付け、
C1:E200を切り取り→A201に貼り付け、
C201:C400を切り取り→A401に貼り付け、
以下略

頻度が多ければマクロにすれば良いのですが、時々発生する程度の作業なので上記をやりながら、もうちょっとマシな操作方法は無いのかな。と思いつつ手作業でやってしまいます。

皆さんの知恵をお貸し下さい。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


メリット:はやい!
以上です、、笑
参考までに

    Sub Macro1()
        Dim i As Long, j As Long, X As Long
        ReDim 読(1 To 100, 1 To 10), 書(1 To 1000)
        With ThisWorkbook.Sheets("Sheet1")
            読 = .Range("A1:J100").Value
            X = 1
            For j = 1 To 10
                For i = 1 To 100
                    書(X) = 読(i, j)
                    X = X + 1
                Next i
            Next j
            .Range("A1:J100").ClearContents
            .Range("A1:A1000") = WorksheetFunction.Transpose(書)
        End With
    End Sub

(TAKA) 2018/09/07(金) 13:44


 私なら、10列程度であれば

 最初にB1を選択し、

 [Ctrl]+[Shift]+[↓][→]
 [Ctrl]+[X]
 [←]
 [Ctrl]+[↓]
 [↓]
 [Enter]
 [→]

 という一連のキー操作の繰り返しでやっちゃいますね^^;

(白茶) 2018/09/07(金) 14:11


TAKAさん
VBAの問題はどこにコードがあるのか探すのに時間がかかることだと考えています。
今回のような例の場合、探すのに5分掛かっていたら作業が終わってしまうと思います。
その辺の問題をカバーする方法があれば知りたいです。

白茶さん
成る程です。
10列などの少なめの列数で途中に空欄がないという条件であればその方法も早そうですね。
(かんがえすぎ) 2018/09/07(金) 14:17


基本的に
VBAは書いておいたコードを探して使うようなものではないです。

たとえば[挿入]→[図形]→[正方形・長方形]でシート上に■の図形を配置します。
図形を右クリックして[マクロの登録]→[新規作成]と押すとVBEが出てくるので
そこに先ほどのマクロを貼っておきます。

次からは図形をクリックするだけで登録したマクロが走ります。

(TAKA) 2018/09/07(金) 14:24


Sub main()
    Dim dt(), r As Long, c As Long, rg As Range
    r = Range("A1").CurrentRegion.Rows.Count
    c = Range("A1").CurrentRegion.Columns.Count
    ReDim dt(1 To r * c)
    For Each rg In Range("A1").CurrentRegion
        dt(rg.Row + (rg.Column - 1) * r) = rg.Value
    Next rg
    Cells.Clear
    Range("A1").Resize(r * c).Value = Application.Transpose(dt)
End Sub
(mm) 2018/09/07(金) 14:46

TAKAさん
そうですよね。
でも一瞬で記述出来るわけではないですよね?
使うにはコピペしてくるか、即興で書くしか無いと思います。

だからマクロではない操作方法という条件で質問したつもりです。

VBAを使えば一瞬で出来るのは当初書いたように承知しているので、あっ、あの時に使ったVBAコードを使いたい!
と思った時にすぐに呼び出せる方法があるなら知りたいです。
皆さんはどうされているのでしょうか。
(かんがえすぎ) 2018/09/07(金) 14:55


 数式で

 A101に
 =INDEX($B$1:$CV$100,IF(MOD(ROW(),100)=0,100,MOD(ROW(),100)),ROUNDDOWN(ROW()/100,0)-IF(MOD(ROW(),100)=0,1,0))
 下方コピー
(seiya) 2018/09/07(金) 15:06

 >皆さんはどうされているのでしょうか。
 についてです。

 >あっ、あの時に使ったVBAコードを使いたい! 
 よくやる操作はアドイン作っていつでも呼び出せるように
 リボンにボタンを用意したり、
 キーボードショートカットに登録したりしてます。
 (例えば[Ctrl]+[Shift]+[V]で「値だけ貼り付け」とか)

 あと、
 特定の業務に特化したマクロであれば、
 それ専用のファイルを作って、
 「この業務を始める時は、まずこれを開く」って感じで、
 ファイルを[業務の入口]という位置付けにしてしまいます。

 いずれにしても「これは別(あるいは次)の機会でも使えるぞ!!」と思ったら、
 まずは、ある程度汎用性を高めたコードに書き直す事を考えますね。
 どこから呼び出すのかは、私の場合、その後で考えてます^^;

(白茶) 2018/09/07(金) 15:18


 個人用マクロブックを使用したり、色々方法はありますが、

>マクロではない操作方法という条件で質問したつもりです。

 ということならお門違いでしたね。失礼しました。

(TAKA) 2018/09/07(金) 16:01


seiyaさん
数式でやる方法、ありがとうございます。
その場で作るとなると(私には)考えるので精一杯で切り取り貼り付けより時間が掛かってしまいそうです。
幸い1行なのでIME辞書に「ひょうをりすとにへんかん」で変換したらこの数式が出るようにして使ってみようと思います。

白茶さん
>「この業務を始める時は、まずこれを開く」って感じで、
なるほどです。ファイル化もアドイン化もそうですが、
増えすぎて今度は見つけるのに時間がかかっているのが悩ましいところです。

TAKAさん
今回は合致しませんでしたが、よくお世話になっておりますので今後共よろしくお願いいたします。

考えていたらTABを改行に置換すれば早いような気がしてきました。
そうするとエクセルより外部エディタを使ったほうが良いのか。と最適解が見えてきた気がします。
エクセル上で置換する方法なんて無いですよね・・・?
(かんがえすぎ) 2018/09/07(金) 17:31


正規表現に対応している外部エディタ案です。

範囲選択してから、どこかのセルに縦横変換貼り付け。 これを更に範囲コピーしてからエディタに貼り付け。 こうすると、セル間にTAB文字が入ります。

エディタで文字列置換(\tを\rに全置換)すると縦1列になるので、これを再びコピーしてシートに貼り付けで、終了。
(???) 2018/09/07(金) 17:41


質問者さん的にはVBA案は無しのようなので、同じような悩みを持ってこのトピックにたどり着いてVBAでもOKな人向け

    Sub 選択範囲を1列に変換()
        Dim i As Long

        With Selection
            If .Columns.Count < 2 Then Exit Sub

            For i = 2 To .Columns.Count
                .Columns(i).Copy .Cells(1).Offset((i - 1) * .Rows.Count)
            Next i

            Intersect(.Cells, .Cells.Offset(, 1)).Clear
        End With
    End Sub

(もこな2) 2018/09/08(土) 16:48


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.