Excel VBA質問箱 IV

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

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


1731 / 13646 ツリー ←次へ | 前へ→

【72310】セルの移動コピー(行指定付き) マリモ 12/7/11(水) 11:05 質問[未読]
【72311】Re:セルの移動コピー(行指定付き) UO3 12/7/11(水) 11:26 発言[未読]
【72312】Re:セルの移動コピー(行指定付き) マリモ 12/7/11(水) 12:06 発言[未読]
【72313】Re:セルの移動コピー(行指定付き) UO3 12/7/11(水) 12:30 発言[未読]
【72314】Re:セルの移動コピー(行指定付き) マリモ 12/7/11(水) 13:15 発言[未読]
【72315】Re:セルの移動コピー(行指定付き) UO3 12/7/11(水) 13:29 発言[未読]
【72316】Re:セルの移動コピー(行指定付き) マリモ 12/7/11(水) 14:26 発言[未読]
【72317】Re:セルの移動コピー(行指定付き) UO3 12/7/11(水) 16:29 発言[未読]
【72318】Re:セルの移動コピー(行指定付き) マリモ 12/7/11(水) 17:09 発言[未読]
【72319】Re:セルの移動コピー(行指定付き) UO3 12/7/11(水) 20:31 発言[未読]
【72320】Re:セルの移動コピー(行指定付き) マリモ 12/7/12(木) 9:42 発言[未読]
【72321】Re:セルの移動コピー(行指定付き) UO3 12/7/12(木) 10:01 発言[未読]
【72325】Re:セルの移動コピー(行指定付き) UO3 12/7/12(木) 14:53 発言[未読]
【72326】Re:セルの移動コピー(行指定付き) マリモ 12/7/12(木) 16:09 発言[未読]
【72330】Re:セルの移動コピー(行指定付き) UO3 12/7/12(木) 18:35 発言[未読]
【72333】Re:セルの移動コピー(行指定付き) マリモ 12/7/13(金) 9:05 発言[未読]
【72335】Re:セルの移動コピー(行指定付き) UO3 12/7/13(金) 11:05 発言[未読]
【72336】Re:セルの移動コピー(行指定付き) マリモ 12/7/13(金) 11:20 お礼[未読]

【72310】セルの移動コピー(行指定付き)
質問  マリモ  - 12/7/11(水) 11:05 -

引用なし
パスワード
     0 1 2 3 4 5
a b
c d
上記のような感じで0〜5のところは
0〜120あり、エクセルの最大行数の関係で
上記のパターンを270セットで考えています。
0〜120は一番上の行にのみ、入れてあります。
a c b 0
 ・
 ・
a c b 120
a c d 0
 ・
 ・
a c d 120
と表示されるようにしたいです。
何か、いい方法がありましたら、教えていただけるとありがたいです。
D列に0〜120の繰り返しが
390回繰り返し入力されることが目的なので
0〜120のところの行は削除しても構わないです。
宜しくお願い申し上げます。

【72311】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/11(水) 11:26 -

引用なし
パスワード
   ▼マリモ さん:

結果をSheet2のA列に書き込んでいます。
Sheet1の1行目の最初の数字はA列から始まっているものとします。
で、ab などのデータはA列2行目から始まっているものとします。
効率を考えればもっと違うコードになりますが、基本的な処理コードとして。

Sub Sample()
  Dim x As Long
  Dim y As Long
  Dim i As Long
  Dim j As Long
  Dim k As Long
  Dim sh2 As Worksheet
  
  Application.ScreenUpdating = True
  
  Set sh2 = Sheets("Sheet2")
  sh2.Columns("A").ClearContents           '実行前に転記領域をクリア
  
  With Sheets("Sheet1")
    x = .Cells(1, .Columns.Count).End(xlToLeft)   '1行目の最終列番号
    y = .Range("A" & .Rows.Count).End(xlUp).Row   'A列の最終行番号
    For i = 2 To y '2行目から最終行まで各行のコードを取得するためにループ
      For j = 1 To y '各行ごとに1行目のA列から最終列までの数値を取得するためにループ
        k = k + 1 '転記シートの行番号をカウントアップ
        sh2.Cells(k, "A").Value = .Cells(i, "A").Value & .Cells(1, j).Value
      Next
    Next
  End With
          
  Application.ScreenUpdating = True
  sh2.Select
  MsgBox "転記終了です"
  
End Sub

【72312】Re:セルの移動コピー(行指定付き)
発言  マリモ  - 12/7/11(水) 12:06 -

引用なし
パスワード
   ▼UO3 さん:
度々、ありがとうございます。
試したら、実行時のエラー'1004'
アプリケーション定義またはオブジェクト定義のエラーになりました。
Sheet2を見てみると
A列に0〜120の後、256行まで0が入力されておりました。

私のミスでしたら、すみません。
宜しくお願い致します。

【72313】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/11(水) 12:30 -

引用なし
パスワード
   ▼マリモ さん:

アップしたコードが対応するレイアウトの前提として

>ab などのデータはA列2行目から始まっているものとします。

とコメントしています。
それは大丈夫ですか?

ただ、それにしても、からぶりすることはあっても 1004エラーは、ちょっと考えられないですねぇ・・・

具体的に、エラーになった時、どのコードが黄色く光っていましたか?
仮に
sh2.Cells(k, "A").Value = .Cells(i, "A").Value & .Cells(1, j).Value
だとすると、その時、マウスを、このコードの k や i や j の上い持っていくと
どんな値が浮かび上がりますか?

【72314】Re:セルの移動コピー(行指定付き)
発言  マリモ  - 12/7/11(水) 13:15 -

引用なし
パスワード
   ▼UO3 さん:
>アップしたコードが対応するレイアウトの前提として
>>ab などのデータはA列2行目から始まっているものとします。
>とコメントしています。
>それは大丈夫ですか?

はい、そのようにしてあります。

>具体的に、エラーになった時、どのコードが黄色く光っていましたか?
>仮に
>sh2.Cells(k, "A").Value = .Cells(i, "A").Value & .Cells(1, j).Value
>だとすると、その時、マウスを、このコードの k や i や j の上い持っていくと
>どんな値が浮かび上がりますか?

sh2.Cells(k, "A").Value = .Cells(i, "A").Value & .Cells(1, j).Value
が光っておりました。
x=120
y=541
i=2
j=257
k=257
でした。
宜しくお願い致します。

【72315】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/11(水) 13:29 -

引用なし
パスワード
   ▼マリモ さん:

ごめんなさ〜いい!!(汗)

      For j = 1 To y  '各行ごとに1行目のA列から最終列までの数値を取得するためにループ

これを

      For j = 1 To x  '各行ごとに1行目のA列から最終列までの数値を取得するためにループ

このように直してください。(はずかし!!)

【72316】Re:セルの移動コピー(行指定付き)
発言  マリモ  - 12/7/11(水) 14:26 -

引用なし
パスワード
   ▼UO3 さん:
>For j = 1 To x  '各行ごとに1行目のA列から最終列までの数値を取得するためにループ
>このように直してください。

変更して実行したところ、転記終了はしましたが
A1〜A120は0〜119
A121〜A130まで
cのところが左寄せで右側には0〜119
251行からは1110〜1199
341行からは11100〜11119
361行目からはまた同じパターンです。
481行目からは6500〜6509
491行目からは65010〜65099
581行目からは650100〜650119
601行目からはまた同じパターンです。
64800行目で終わっております。

宜しくお願い致します。

【72317】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/11(水) 16:29 -

引用なし
パスワード
   ▼マリモ さん:

あらためて質問文を読み直しました。
要件を誤解していたんでしょうか?
私のコードは、たとえば A2 に ab、A3 に cd とある。その時

ab0
ab1
ab2
ab3


ab119
ab120
ac0
ac1
ac2
ac3


ac119
ac120

こういうふうに出しています。

質問文をよみなおしてみますと

a b
c d

という登録に対して

a c b 0
 ・
 ・
a c b 120
a c d 0
 ・
 ・
a c d 120

まず、この a と b は、もしかしたらセルが別なのかなという疑問と
根本的に生成されるものが

a c b 0
a c b 1

この生成されるものも、それぞれセルがわかれているのかな?
それに加えて、 この a c b という組み合わせは、どういう意味なんだろう?
なんとなく a b の間に c d の最初の c を挟み込んだもの?
そうすると、次の a c d 、これは、どういう意味なんだろう?

もう一度、どう組み合わせたいのか、その組み合わせルールと、元データ、転記データそれぞれ
セルがわかっれるのか、1つの文字列なのか、説明いただけませんか?

【72318】Re:セルの移動コピー(行指定付き)
発言  マリモ  - 12/7/11(水) 17:09 -

引用なし
パスワード
   ▼UO3 さん:
>まず、この a と b は、もしかしたらセルが別なのかなという疑問と
>根本的に生成されるものが
>a c b 0
>a c b 1
>この生成されるものも、それぞれセルがわかれているのかな?

説明が上手くできずにすみません。
それぞれがセルで分かれております。

>それに加えて、 この a c b という組み合わせは、どういう意味なんだろう?
>なんとなく a b の間に c d の最初の c を挟み込んだもの?
>そうすると、次の a c d 、これは、どういう意味なんだろう?

a b c dはその場所が分かるように仮に作ったものです。

>もう一度、どう組み合わせたいのか、その組み合わせルールと、元データ、転記データそれぞれ
>セルがわかっれるのか、1つの文字列なのか、説明いただけませんか?

  0    1     2     3     4
 11    m    234    789    567
札幌    f    345    789    234

上記のは全てセルで分かれております。
これを下記のようにセルで分かれた状態にしたいのです。

11    札幌    m    0    234
11    札幌    m    1    789
11    札幌    m    2    567
11    札幌    f    0    345
11    札幌    f    1    789
11    札幌    f    2    234

仮に0〜2にしてありますが、0〜120あります。
ちなみにデータの一番上に1行0〜120入れると1745行あるので
エクセルの最大行数を考えるとできないと思い、
キリのいい541行でカットしてみました。

説明不足でお手数をおかけして申し訳ありません。
長いお時間考えてくださり、ありがとうございます。
宜しくお願い致します。

【72319】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/11(水) 20:31 -

引用なし
パスワード
   ▼マリモ さん:

まだ飲み込めないところがあります。
元表が、具体的に、何を管理している・・というか、何をあらわしている表なのかがわかれば、
イメージもつかめるかもしれないんですが、さておき。

まず、今回、新しく234 789 567 といったものが登場しましたね。
最初の説明にはなかったものですけど、ちょっと困惑してます。

まぁ、それもさておき。

・A列、A2が11,A3が札幌というサンプルですけど、A4,A5,・・・は空白ですね?
 さっぽrpの下にまた、何かが登場するということはないですね?
・従ってB列も、B2,B3だけで、B4,B5,・・・・は空白ですね。m や f の下に何か登場することはないですね?
・組み替え後の5列目ですけど、これは、元表の各行のC列以降のものをセットするんですね?
・仮にアップされたものだけの元表だったとしますと、組み替え後の 11 札幌 m 3 のあとの列は空白ですね?
 11 札幌 m 4 のあとも空白ですね。

↑の理解はアップされたサンプルイメージだけからの想像です。
いやいや、そうじゃないということであれば、組み替えルールを【言葉】で表現いただきたいと思います。

たとえば、元表があって、それを、手作業で紙の上で組み替えて書くという仕事をアルバイトの人に
やってもらおうと思えば、その人に、言葉で、こういう手順で(規則で)組み替え表を作ってくれと
お願いしますよね。その説明をいただきたいのですが。

【72320】Re:セルの移動コピー(行指定付き)
発言  マリモ  - 12/7/12(木) 9:42 -

引用なし
パスワード
   ▼UO3 さん:
>元表が、具体的に、何を管理している・・というか、何をあらわしている表なのかがわかれば、
>イメージもつかめるかもしれないんですが、さておき。

地区ごとの人口の表を作ろうとしています。
0〜120のところは実際には0才〜120才という意味です。

>まず、今回、新しく234 789 567 といったものが登場しましたね。
>最初の説明にはなかったものですけど、ちょっと困惑してます。

そこの数字は仮ですが、人口数が入っております。

>・A列、A2が11,A3が札幌というサンプルですけど、A4,A5,・・・は空白ですね?
> さっぽrpの下にまた、何かが登場するということはないですね?
>・従ってB列も、B2,B3だけで、B4,B5,・・・・は空白ですね。m や f の下に何か登場することはないですね?
>・組み替え後の5列目ですけど、これは、元表の各行のC列以降のものをセットするんですね?
>・仮にアップされたものだけの元表だったとしますと、組み替え後の 11 札幌 m 3 のあとの列は空白ですね?
> 11 札幌 m 4 のあとも空白ですね。
>↑の理解はアップされたサンプルイメージだけからの想像です。
>いやいや、そうじゃないということであれば、組み替えルールを【言葉】で表現いただきたいと思います。

まず、0〜120は言われた通り、A1〜DQ1まで連番で
A2に11と入れてあるのは地区コードになります。
また、A4,A6,A8・・・と1行おきに地区コードが入力されております。
A3に札幌と入れてあるのは地区名です。
これも、A5,A7,A9・・・と1行おきに地区名が入力されております。
元図のシートの最終行は1745行です。
A2:DS3のセット、A4:DS5のセット・・A1744:DS1745のセットまでを
A1:E242のセット、A243:E484のセット・・に変えたいです。
B2のmは男性を示し、B3のfは女性を示しております。
B4,B6,B8はm、B5,B7,B9はfが入っております。
C2は0才の男性の人口、D2は1才の男性の人口・・DS2は120才の男性の人口。
C3は0才の女性の人口、D3は1才の女性の人口・・DS3は120才の女性の人口。
またその下に次の地区の人口が年齢別に入っております。
C4は0才の男性の人口、D4は1才の男性の人口・・DS4は120才の男性の人口。
C5は0才の女性の人口、D5は1才の女性の人口・・DS5は120才の女性の人口。

出来上がりのイメージはA列に地区コード、
B列に地区名、C列に男性・D列に0〜120才、
その後にC列に続けて女性・D列に0〜120才、E列にそれぞれの人口。
という感じに仕上げたいです。

まだまだ説明不足かもしれませんが、これでイメージが伝わりますでしょうか。
宜しくお願い致します。

【72321】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/12(木) 10:01 -

引用なし
パスワード
   ▼マリモ さん:

なぁるほど、わかりました。

でも、最初の
  0 1 2 3 4 5
a b
c d

これから

a c b 0
 ・
 ・
a c b 120
a c d 0
 ・
 ・
a c d 120

これを作りたい という質問からは、まったく想像できない仕様・要件でしたね(笑)

ともあれ、コードを書いてみますのでしばしお待ちください。
なお、説明いただいた要件であれば1行目の年齢は、2行目以降の人数と同じ列のほうがよろしいかと
思いますので、これから書くコードでは1行目の 0,1,2・・・・はC列から始まっているという前提にしますね。

【72325】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/12(木) 14:53 -

引用なし
パスワード
   ▼マリモ さん:

たぶん、勘違いはもうないと思いますが(?)
1行目の年齢はC列から横にあるという前提です。

Sub Sample2()
  Dim x As Long
  Dim y As Long
  Dim i As Long
  Dim j As Long
  Dim k As Long
  Dim z As Long
  Dim aCode As String
  Dim aName As String
  Dim mf As String
  Dim w() As Variant
  
  With Sheets("Sheet1")
  
    y = .Range("A" & .Rows.Count).End(xlUp).Row
    x = .Cells(1, .Columns.Count).End(xlToLeft).Column
    ReDim w(1 To .Rows.Count, 5)
    
    For i = 2 To y Step 2
      aCode = .Cells(i, "A").Value
      aName = .Cells(i + 1, "A").Value
      For z = i To i + 1
        mf = .Cells(z, "B").Value
        For j = 3 To x
          k = k + 1
          w(k, 1) = aCode
          w(k, 2) = aName
          w(k, 3) = mf
          w(k, 4) = .Cells(1, j).Value  '1行目の年齢
          w(k, 5) = .Cells(z, j).Value  'このデータの人数
        Next
      Next
    Next
    
  End With
  
  With Sheets("Sheet2")
    .Cells.ClearContents
    .Range("A1").Resize(k, UBound(w, 2)).Value = w
    .Select
  End With
  
  MsgBox "組み換え終了です"
  
End Sub

【72326】Re:セルの移動コピー(行指定付き)
発言  マリモ  - 12/7/12(木) 16:09 -

引用なし
パスワード
   ▼UO3 さん:
ありがとうございます。
表示されたのはB列に地域コード、C列に地域名
D列にm→f(120ずつの繰り返し)、E列に0〜120の繰り返しが
出来上がりました。
思っているものにかなり近づいてきました。

表示はこの通りでA列から表示させたいのと
今表示されているE列の右側にC2:DS542のデータを載せたいのですが
この部分が表示されておりません。

宜しくお願い致します。

【72330】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/12(木) 18:35 -

引用なし
パスワード
   ▼マリモ さん:

>表示はこの通りでA列から表示させたいのと

アップしたコードはA列から表示していますけど・・・??

>今表示されているE列の右側にC2:DS542のデータを載せたいのですが
>この部分が表示されておりません。

そりゃぁ表示してませんよ。
要件にありませんでしたから。
(それとも、どこかで説明いただいてましたっけ?)
C2:DS542 って、何のデータが入っているのですか?

【72333】Re:セルの移動コピー(行指定付き)
発言  マリモ  - 12/7/13(金) 9:05 -

引用なし
パスワード
   ▼UO3 さん:

>アップしたコードはA列から表示していますけど・・・??

私のほうの不具合だと思いますので再度、確認してみます。

>そりゃぁ表示してませんよ。
>要件にありませんでしたから。
>(それとも、どこかで説明いただいてましたっけ?)
>C2:DS542 って、何のデータが入っているのですか?

7/12 9:42の発言より
------------------------------------------------------------------
C2は0才の男性の人口、D2は1才の男性の人口・・DS2は120才の男性の人口。
C3は0才の女性の人口、D3は1才の女性の人口・・DS3は120才の女性の人口。
またその下に次の地区の人口が年齢別に入っております。
C4は0才の男性の人口、D4は1才の男性の人口・・DS4は120才の男性の人口。
C5は0才の女性の人口、D5は1才の女性の人口・・DS5は120才の女性の人口。

出来上がりのイメージはA列に地区コード、
B列に地区名、C列に男性・D列に0〜120才、
その後にC列に続けて女性・D列に0〜120才、E列にそれぞれの人口。
という感じに仕上げたいです。
-------------------------------------------------------------------
ほんと説明不足で申し訳ありません。
C2:DS542には0〜120才の人口が男性・女性と交互の行で入力されております。
行並びのを列並びに変えたいのです。

長きに渡り、お世話をおかけして申し訳ありません。
お知恵を貸していただければ、幸いです。

【72335】Re:セルの移動コピー(行指定付き)
発言  UO3  - 12/7/13(金) 11:05 -

引用なし
パスワード
   ▼マリモ さん:

ごめんなさい。
バグがありました。
結果的に、A列ではなくB列から表示されてますね。

ReDim w(1 To .Rows.Count, 5)
これを
ReDim w(1 To .Rows.Count, 1 To 5)
これでどうですか?

【72336】Re:セルの移動コピー(行指定付き)
お礼  マリモ  - 12/7/13(金) 11:20 -

引用なし
パスワード
   ▼UO3 さん:

>ReDim w(1 To .Rows.Count, 1 To 5)
>これでどうですか?

感動しました。
A列から表示されて、E列には人口が表示されるようになりました。
ご多用のところ洵にありがとうございました。
ほんと、助かりました。
今後、もっと勉強を積み重ねて参りたいと思います。

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