Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1113 / 13645 ツリー ←次へ | 前へ→

【76244】データを一列に並べるマクロ akiko☆ 14/10/20(月) 15:12 質問[未読]
【76246】Re:データを一列に並べるマクロ γ 14/10/20(月) 21:46 発言[未読]
【76250】Re:データを一列に並べるマクロ akiko☆ 14/10/21(火) 9:40 質問[未読]
【76271】Re:データを一列に並べるマクロ γ 14/10/22(水) 21:24 発言[未読]
【76273】Re:データを一列に並べるマクロ akiko☆ 14/10/23(木) 9:47 お礼[未読]

【76244】データを一列に並べるマクロ
質問  akiko☆  - 14/10/20(月) 15:12 -

引用なし
パスワード
   はじめて投稿させていただきます。

データが各列、各行にわりとバラバラに
入力されている状態なのを、
一列に並べたいと思っています。

範囲がA1からAS7002まであります。
データは26733個です。

何かよいやり方がありますでしょうか。

どうぞよろしくお願いいたします。

※下記マクロを参考にしましたが、
データが多いとエラーになってしまいます。
strData = strData & vbTab & Cells(lngRow, lngCol).Value

▼複数の列に入力されているデータを一列にまとめるマクロ
Sub AlignDataTo1Col()

 Dim lngRow As Long
 Dim lngCol As Long
 Dim strData As String
 Dim varData As Variant
 Dim lngLop As Long
 Dim rngOutPut As Range

 For lngCol = Selection(1).Column To Selection(Selection.Count).Column
  For lngRow = Selection(1).Row To Selection(Selection.Count).Row
   If Not IsEmpty(Cells(lngRow, lngCol).Value) Then
    strData = strData & vbTab & Cells(lngRow, lngCol).Value
   End If
  Next lngRow
 Next lngCol

 varData = Split(strData, vbTab)

 On Error Resume Next
 Set rngOutPut = Application.InputBox(Prompt:="出力先セルを指定してください。", Type:=8)

 For lngLop = 1 To UBound(varData)
  rngOutPut.Offset(lngLop - 1, 0).Value = varData(lngLop)
 Next

End Sub

【76246】Re:データを一列に並べるマクロ
発言  γ  - 14/10/20(月) 21:46 -

引用なし
パスワード
   配列を使ってはどうですか?

Dim a(1 To 30000, 1 To 1) As Variant
というように少し大きめの配列を用意しておいて、
その配列に書き込んでいきます。
そして、いくつ書き込んだかもカウントしておきます。

最後に
Range("A1").Resize(カウント, 1) = a
とすれば、必要な箇所だけがシートに書き込めます。

【76250】Re:データを一列に並べるマクロ
質問  akiko☆  - 14/10/21(火) 9:40 -

引用なし
パスワード
   γさま、早速にご回答ありがとうございます!

▼γ さん:
>配列を使ってはどうですか?
>
>Dim a(1 To 30000, 1 To 1) As Variant
>というように少し大きめの配列を用意しておいて、
>その配列に書き込んでいきます。
>そして、いくつ書き込んだかもカウントしておきます。
>
>最後に
>Range("A1").Resize(カウント, 1) = a
>とすれば、必要な箇所だけがシートに書き込めます。

ありがとうございます。
本当に申し訳ないのですが、具体的にどこに
どのように教えていただいたのを入れ込めば
よろしいでしょうか。。

どうぞよろしくお願いいたします。

【76271】Re:データを一列に並べるマクロ
発言  γ  - 14/10/22(水) 21:24 -

引用なし
パスワード
   それだけのコードが書けるのですから、少しトライされたらわかりそうに
思いますが、不明点はどこでしょうか?

> その配列に書き込んでいきます。
> そして、いくつ書き込んだかもカウントしておきます。
ここは誤解を招くかも。
カウントしておくというか、書き込む時に、位置が必要ですから、
覚えて置くもなにもないですね。
 p = p + 1
 a(p,1) = Cells(lngRow, lngCol).Value
ですね。

そして、最後に
rngOutPut.Resize(p, 1) = a
ですね。

【76273】Re:データを一列に並べるマクロ
お礼  akiko☆  - 14/10/23(木) 9:47 -

引用なし
パスワード
   γさま

ご返信ありがとうございました!

▼γ さん:
>それだけのコードが書けるのですから、少しトライされたらわかりそうに
>思いますが、不明点はどこでしょうか?

いえ;実はネット上にあったのを参考にさせて
いただいただけなので、ほぼ素人なのです。。
それなのにこちらに書き込みをしてしまったこと自体、
たいへん申し訳ありませんでした。。

そして件数に関わりなく、エラーが出てしまった
理由が分かりました。データに、「=」が含まれており、
その結果が「#NAME?」(書名の一部なのですが)に
なっていたが原因でした。。。

>> その配列に書き込んでいきます。
>> そして、いくつ書き込んだかもカウントしておきます。
>ここは誤解を招くかも。
>カウントしておくというか、書き込む時に、位置が必要ですから、
>覚えて置くもなにもないですね。
> p = p + 1
> a(p,1) = Cells(lngRow, lngCol).Value
>ですね。
>
>そして、最後に
>rngOutPut.Resize(p, 1) = a
>ですね。

ご丁寧にご説明くださって本当にありがとうございます。
もっとちゃんと勉強してから門をたたくべきでした。。

またお世話になることもあるかと存じます、
どうぞよろしくお願いいたします。

1113 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free