アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCELのVBAでどうしても前に進めず困っております。

目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。

以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。
VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。

Public Sub xx()

Dim SelectArea As String
Dim TargetCell As Range
Dim a As Integer
Dim Row As Integer
Dim Column As Integer
Dim CNT1 As Integer

a = 0
Row = 0
Column = 0

For CNT1 = 1 To 10

Row = Row + 1
SelectArea = Selection.Address
Set TargetCell = Range("B3").Cells(Row - 1, Column)

If Intersect(Range(SelectArea), TargetCell) Is Nothing Then

Else

Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value

a = a + 1

End If

Next


End Sub

A 回答 (2件)

例えばB列を任意に選択してA1から下に順に並べるなら、



Sub try()
Dim r As Range
Dim rr As Range

Set rr = Range("A1")

For Each r In Selection
rr.Value = r.Value
Set rr = rr.Offset(1)
Next

Set rr = Nothing
End Sub

こんな感じでも出来ますけど。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
目的通りの動作を得ることが出来ました。

意外だったのは、セルを選択した順番に値が取得されたということです。
選択状態であれば、行または列から順番に値が取得されていくのだと思っていましたが、そうではないのですね。
並び替えをすることで解決できそうですので、教えていただいたコードで組み立ててみたいと思います。

お礼日時:2008/12/30 13:02

最初のうちは、変数を日本語で設定すると


コードが読みやすいと思います
コードは#1さんとかぶってます
’------------------------------------------------------------
Sub てすと()

Dim 選択されたセル全部 As Range
Dim 選択されたセルの中の一つ As Range
Dim 書き出しセル As Range
Dim 行 As Integer

Set 選択されたセル全部 = Selection
Set 書き出しセル = Range("a1")
行 = 0

For Each 選択されたセルの中の一つ In 選択されたセル全部
書き出しセル.Offset(行, 0).Value = 選択されたセルの中の一つ.Value
行 = 行 + 1
Next

Set 選択されたセル全部 = Nothing
Set 書き出しセル = Nothing

End Sub
’-------------------------------------------------------------

がんばって
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A