プロが教える店舗&オフィスのセキュリティ対策術

  A  B    C
1 山田 地下鉄  160 
2    地下鉄  150
3    タクシー 1120
4    地下鉄  150
5 鈴木 地下鉄  210
6    タクシー 5220

上記のようなデータがあり、VBAで別シートに
A2~A4までA1の山田が、A6にはA5の鈴木が
入った形でコピーしたいのですが、実現可能でしょうか?
よろしくお願いいたします。

※添付画像が削除されました。
gooドクター

A 回答 (6件)

Dim i As Integer


Dim S As String
S = ""
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
If Cells(i, 1).Value = "" Then
Cells(i, 1).Value = S
Else
S = Cells(i, 1).Value
End If
Next i
    • good
    • 11
この回答へのお礼

nag0720様、ご回答ありがとうございます。
変数Sの使い方が大変勉強になりました。
記述いただきました内容でやりたいことが無事できました。

お礼日時:2009/08/19 20:47

Dim rr As Range


Dim rb As Range
Dim i As Long
Set rr = Range("A1", "A" & Cells(Rows.Count, 2).End(xlUp).Row)
Set rb = rr.SpecialCells(xlCellTypeBlanks)
For i = 1 To rb.Areas.Count
With rb.Areas(i)
.Value = .Item(1).Offset(-1).Value
End With
Next i

スペースとか、長さ0の文字列、が入っている見かけが空白セルの場合は別途対策が必要です。
    • good
    • 1
この回答へのお礼

xls88様、ご回答ありがとうございました。
色々な書き方があって大変勉強になります。

お礼日時:2009/08/19 20:55

以下の手順で行ってください。



(1)まずは以下のコードをモジュールに貼り付けてください。

Sub コピー()
Dim i As Integer, s As Worksheet, s1 As Worksheet, x As String
Set s = Sheets("Sheet1") '(1)「Sheet1」の6文字をコピー元のシート名に変更
Set s1 = Sheets("Sheet2") '(2)「Sheet2」の6文字をコピー先のシート名に変更
For i = 1 To s.Range("B" & Rows.Count).End(xlUp).Row
If Not s.Cells(i, 1).Value = "" Then x = s.Cells(i, 1).Value
s.Range("A" & i & ":" & "C" & i).Copy s1.Range("A1").Offset(i - 1)'(3)
s1.Range("A1").Offset(i - 1) = x
Next i
End Sub

(2)そしてコードの緑色の部分(1)(2)を指示通りに変更してください。
(3)マクロを実行してください。(どのシートを開いてマクロを実行してもOKです。)

きちんと動きましたか?

A列からC列を処理するようにしています。もし行一列すべてをコピーしたいなら(3)の

s.Range("A" & i & ":" & "C" & i).Copy s1.Range("A1").Offset(i - 1)'(3)

を消して

s.Rows(i).Copy s1.Range("A1").Offset(i - 1)

に変更してください。
    • good
    • 0
この回答へのお礼

yuujgmn様、ご回答ありがとうございます。
丁寧に教えていただきまして助かりました。

お礼日時:2009/08/19 20:48

A列において、A2からデータがある行まで選択します。


Ctrl+Gで「ジャンプ」画面を開きます。
ジャンプ画面の「セル選択」で「選択オプション」を開きます。
空白セルを選択してOKを押します。(A列の複数の空白セルのみが選択されます)
「名前ボックス」が「A2」となっていることを確認したら、数式バーに「=A1」と入力し、Ctrl+Enterします。

以上です。

この回答への補足

cistronezk様、ご回答ありがとうございます。
毎回、元の形式で新しいデータが届くため、ワンボタンで
処理できるようにしたいと考えております。
説明不足で申し訳ございません。

補足日時:2009/08/19 14:41
    • good
    • 0

VBAを使用しなくても、次の式をE2セルに入力して下方にオートフィルドラッグすればよいでしょう。


=IF(A2<>"",A2,IF(AND(A2="",B2<>""),A1,""))

この回答への補足

KURUMITO様、ご回答ありがとうございます。
元のデータが5000件以上あり、毎日新しく届くため、
VBAで取込処理をしたいと考えております。
また、その為の列も極力用意したくないため、VBAでの方法を
ご教授いただければとご相談しました。
説明不足で申し訳ございません。

補足日時:2009/08/19 14:38
    • good
    • 1

あの・・・



D1セルに =A1
D2セルに =IF(A2="",D1,A2)
D2セルをD3セル以降にコピー

これだけで、D列にお望みのデータが出来上がりますけど・・・。
後は適当に「コピー」「形式を選択して貼り付け:値」にすれば。

この回答への補足

FEX2053様、早速のご回答ありがとうございます。
それ用に列を用意しなくて済む方法があればと思い
相談させていただきました。説明不足で申し訳ございません。

補足日時:2009/08/19 14:13
    • good
    • 1

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

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

gooドクター

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

人気Q&Aランキング