Excel VBA質問箱 IV

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

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


6730 / 13644 ツリー ←次へ | 前へ→

【25725】よくわからない mari 05/6/12(日) 8:34 質問[未読]
【25726】Re:よくわからない かみちゃん 05/6/12(日) 9:54 回答[未読]
【25727】Re:よくわからない 小僧 05/6/12(日) 10:13 回答[未読]
【43497】Re:よくわからない まいける 06/10/17(火) 16:19 回答[未読]
【43499】Re:よくわからない Jaka 06/10/17(火) 17:18 発言[未読]
【43500】Re:よくわからない Kein 06/10/17(火) 17:58 回答[未読]

【25725】よくわからない
質問  mari  - 05/6/12(日) 8:34 -

引用なし
パスワード
   初めまして。大学でデータ処理を学んでいる者です。質問です!
エクセルで例えば
        1
        2
        3
        4
        5
と並んでいる文字を違うセルにVBAをつかって
        12345
というようにコピーするようなプログラム
sum 列を行に()
  k=1
  for i=1 to 5 
    ・
    ・
    ・
の作り方を教えてください。また、このような作業の簡単な方法(公式)などありませんか。授業でついていけなく困っています。よろしくお願いします。

【25726】Re:よくわからない
回答  かみちゃん  - 05/6/12(日) 9:54 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>エクセルで例えば
>        1
>        2
>        3
>        4
>        5
>と並んでいる文字を違うセルにVBAをつかって
>        12345
>というようにコピーするようなプログラム

これは、
   A   B   C
1 12345
と表示させたいのか
  A B C D E
1 1 2 3 4 5
と表示させたいのですか?
前者であれば、For〜Nexを使わないとできませんが、
後者であれば、「形式を選択して貼り付け」の「行列を入れ替える」をすれば
少しヒントになると思います。

後者は、「マクロの記録」を使えばできますので、ご自分で確認してみてください。

前者は、学習としては、以下のような感じでできると思います。
Sub Macro1()
 Dim i As Integer

 For i = 1 To 4
  With Cells(1, 1)
   .Value = .Value & Cells(i + 1, 1).Value
  End With
 Next
End Sub

汎用性を持たせるならば、こんな感じでできると思います。
Sub Macro2()
 Dim i As Integer

 For i = 1 To 4
  With ActiveCell
   .Value = .Value & .Offset(i).Value
  End With
 Next
End Sub

> このような作業の簡単な方法(公式)などありませんか。

Excelヘルプに使用例が載っていますので、試してみることです。
あとは、ここの掲示板などいろいろなWebでサンプルなど紹介されていることが多いので、試してみることです。

【25727】Re:よくわからない
回答  小僧  - 05/6/12(日) 10:13 -

引用なし
パスワード
   ▼mariさん、かみちゃん さん:
おはようございます。

かみちゃんさんの後者

>  A B C D E
>1 1 2 3 4 5

の場合の考え方の例です。

Sub 行を列に()
Dim I As Long
  For I = 1 To 5
    Cells(1, I).Value = Cells(I, 1).Value
  Next
End Sub

(1,1)の値は(1,1)の値を代入
(1,2)の値は(2,1)の値を代入
(1,3)の値は(3,1)の値を代入



という感じですね。この基本のコードに

・(1,1)は縦横の値がかぶっているけどどうする?
・元の値を空白にしなくていいの?
・実はA列じゃなくてC列なのよね…。

のような条件を組み合わせていけば良いと思います。

>> このような作業の簡単な方法(公式)などありませんか。
>
>Excelヘルプに使用例が載っていますので、試してみることです。
>あとは、ここの掲示板などいろいろなWebでサンプルなど紹介されていることが多いので、試してみることです。

かみちゃんさんのご提示された意見に大賛成です。
「本を読む」「Webで探す」など手段は多々ありますが、ご自分でコードを
どんどん書いて試していくのが上達の手段だと思われます。

※題名は同じ悩みを持っている他の人が検索しやすいように
 内容に沿った題名にしてみてはいかがでしょうか。
 今回の場合ですと「行と列を入れ替えるには?」とか…。

【43497】Re:よくわからない
回答  まいける  - 06/10/17(火) 16:19 -

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

>Sub 行を列に()
>Dim I As Long
>  For I = 1 To 5
>    Cells(1, I).Value = Cells(I, 1).Value
>  Next
>End Sub
>

「選択したセル」から行を列にするマクロが作りたかったので
上記基本コードを参考にさせていただきました。
ありがとうございます。

↓完成したマクロ(初心者なので苦労しました)

Sub 行を列に()
Dim I As Long
  For I = 1 To 5
    ActiveCell.Cells(, I).Value = ActiveCell.Cells(I).Value
  Next
End Sub

【43499】Re:よくわからない
発言  Jaka  - 06/10/17(火) 17:18 -

引用なし
パスワード
    大学という事でロジックの勉強だと思いますが....。
おまけで手法(因みにA1:A5800だったか?ぐらいまで)
tt2は、列数に合わせるため256まで。

Sub tttt1()
tb = Range("A1:A10").Value
tb = Join(Application.Transpose(tb))
Range("C1").Value = tb
End Sub

Sub mdmm2()
tb = Range("A1:A256").Value
Sheets(2).Range("A1").Resize(, UBound(tb)).Value = Application.Transpose(tb)
Erase tb
End Sub

【43500】Re:よくわからない
回答  Kein  - 06/10/17(火) 17:58 -

引用なし
パスワード
   右クリックイベントを使うと、便利になります。コードは


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
Cancel As Boolean)
  With Target
   If .Areas.Count <> 2 Then Exit Sub
   If .Areas(1).Count = 1 Or .Areas(2).Count > 1 Then
     Exit Sub
   End If
   With .Areas(1)
     If WorksheetFunction.CountA(.Cells) < 2 Then
      Exit Sub
     End If
     If .Columns.Count > 1 Then
      If .Rows.Count > 1 Then Exit Sub
     End If
     If .Rows.Count > 1 Then
      If .Columns.Count > 1 Then Exit Sub
     End If
     Cancel = True
     .Copy
   End With
  End With
  On Error Resume Next
  ActiveCell.PasteSpecial Transpose:=True
  Application.CutCopyMode = False
End Sub

初めに、縦でも横でも複数のセル(値が2つ以上入力されていること)を選択し、
Ctrlキーを押しながら貼り付け先のセルを一つ選択、そのまま右クリック
してみて下さい。コピー元のセル範囲が縦一列なら一行に、横一行なら一列に
行列変換して貼り付けることが出来ます。

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