Excel VBA質問箱 IV

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

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


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

【20736】初心者です。教えてください。 ほい 04/12/16(木) 22:07 質問[未読]
【20737】Re:初心者です。教えてください。 ちゃっぴ 04/12/16(木) 23:48 回答[未読]
【20738】Re:初心者です。教えてください。 Kein 04/12/16(木) 23:51 回答[未読]
【20739】Re:初心者です。教えてください。 かみちゃん 04/12/17(金) 0:04 回答[未読]
【20765】Re:初心者です。教えてください。 ほい 04/12/18(土) 0:00 お礼[未読]

【20736】初心者です。教えてください。
質問  ほい  - 04/12/16(木) 22:07 -

引用なし
パスワード
   ここに書きこむのも初めてなので、1問ずつ質問すべきなのかもわからず
まとめて質問させていただきます。
1. H1の値をA9:A13までの各々のセルに
  H17値をA25:A29までの各々のセルに
  H33の値をA41:A45までの各々のセルにいれたいので
マクロを
For i = 1 To 6
For h = 1 To 5
Dim strname As String
Cells(16 * i - 8, 1).Offset(h, 0).Select
ActiveCell.FormulaR1C1 = Cells(1, 8).Value
Next h
Next i
End Sub
と記述するとH1の値だけが「A9:A13」「A25:A29」
「A41:A45」セルに貼り付けられてしまいます。
どのように変更すれば希望通りのマクロができますか?
(H49以降のセルに値が入っていた場合にも対応できるマクロ)

2. A列で空欄になっているセルの行を削除するマクロ
(A5のセルが空欄であれば5行目を削除)

3. A1:O31まで値が入っており、32行以降が全て空欄の場合、I1からO31までの値を切り取りA33以降へ貼り付けるマクロはありますか?
(値が47行まであり、48行以降空欄であれば、I1からO47までの値を切り取りA49以降へ貼り付けるというふうに、値の入力されている範囲(行)が変わっても、値の入っている最終行から1行あけた下の行にIからOまでの値を貼り付ける)

4. ひとつのブックに「名前」「コード」「1」「2」・・・「20」という名前のシートを作り、「名前」「コード」以外のシートの値をコピーして(新しいシートをつくり)貼り付けるマクロ
(「1」の値が30行まであれば新しいシートの30行まで貼り付け、そこから1行あけて32行以降に「2」のシートの値を貼り付けるマクロ)

5. 1つのシート上に複数つくったオートシェイプ図形やワードアート文字だけを全て消去するマクロ(セルの幅や高さなどはそのまま変えずに)

以上、質問です。端的にまとめられず、長くなってしまいましたが宜しくお願いします。

【20737】Re:初心者です。教えてください。
回答  ちゃっぴ  - 04/12/16(木) 23:48 -

引用なし
パスワード
   >ここに書きこむのも初めてなので、1問ずつ質問すべきなのかもわからず
>まとめて質問させていただきます。

別々のほうがいいかと・・

>1. H1の値をA9:A13までの各々のセルに
>  H17値をA25:A29までの各々のセルに
>  H33の値をA41:A45までの各々のセルにいれたいので

>ActiveCell.FormulaR1C1 = Cells(1, 8).Value
             ~~~~~~~~~~~
ここが固定になっていいるので、当然といえば当然

ちなみに同じ値を入れるのであれば、Loopを使用せずとも

Range("A9:A13").Value = Cells(1, 8).Value

のような感じでまとめて代入できます。

>2. A列で空欄になっているセルの行を削除するマクロ
>(A5のセルが空欄であれば5行目を削除)

SpecialCells Method, EntireRows MethodをHelpでお調べください。

>3. A1:O31まで値が入っており、32行以降が全て空欄の場合、I1からO31までの値を切り取りA33以降へ貼り付けるマクロはありますか?
>(値が47行まであり、48行以降空欄であれば、I1からO47までの値を切り取りA49以降へ貼り付けるというふうに、値の入力されている範囲(行)が変わっても、値の入っている最終行から1行あけた下の行にIからOまでの値を貼り付ける)

最終行の取得方法勉強しましょう。
HelpでEnd Propertyをお調べください。

>4. ひとつのブックに「名前」「コード」「1」「2」・・・「20」という名前のシートを作り、「名前」「コード」以外のシートの値をコピーして(新しいシートをつくり)貼り付けるマクロ

Loop構文と、条件分岐構文を組み合わせれば、簡単にできるでしょ。
Loopした中で、特定のものは除外という風に・・・

>5. 1つのシート上に複数つくったオートシェイプ図形やワードアート文字だけを全て消去するマクロ(セルの幅や高さなどはそのまま変えずに)

For Each で Shapesをぶん回して片っ端からDelete?
Loopしなくてもできたかな?

【20738】Re:初心者です。教えてください。
回答  Kein  - 04/12/16(木) 23:51 -

引用なし
パスワード
   1 について

Dim i As Long

For i = 1 To Range("H65536").End(xlUp).Row Step 9
  Cells(i + 8, 1).Resize(5).Value = Cells(i, 8).Value
Next i

2 について

On Error Resume Next
Range("A1", Range("A65536").End(xlUp)) _
.SpecialCells(4).EntireRow.Delete xlShiftUp

3 について

If Range("I1", Range("O65536").End(xlUp)) _
.Cut Range("A65536").End(xlUp).Offset(1)

4 について
>「名前」「コード」「1」「2」・・・「20」という名前のシートを作り
既にシートが作られていて、データが入力されているという前提で

Dim WS As Worksheet

With Worksheets(1)
  If .Name = "まとめ" Then
   .Cells.ClearContents
  Else
   Worksheets.Add(Before:=Worksheets(1)).Name = "まとめ"
  End If
End With
For Each WS In Worksheets
  If IsNumeric(WS.Name) Then
   If WorksheetFunction.CountA(WS.Cells) > 0 Then
     WS.UsedRange.Copy Worksheets(1) _
     .Range("A65536").End(xlUp).Offset(2)
   End If
  End If
Next
Worksheets(1).Rows("1:2").Delete xlShiftUp

5 について

アクティブシート上の図形等を消すとして

ActiveSheet.DrawingObjects.Delete

以上、そちらの説明不足によって発生するようなエラーは、考慮してません。

【20739】Re:初心者です。教えてください。
回答  かみちゃん  - 04/12/17(金) 0:04 -

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

>ここに書きこむのも初めてなので、1問ずつ質問すべきなのかもわからず
>まとめて質問させていただきます。

5つの質問の答えをひとつずつ考え始めたのですが、すでに、ちゃっぴさんやKeinさんからレスがついているので、考え終わったものだけ書いておきます。
内容は似ていますが、そこは、せっかくなのでということでご了承を。

>1. H1の値をA9:A13までの各々のセルに
>  H17値をA25:A29までの各々のセルに
>  H33の値をA41:A45までの各々のセルにいれたいので

原因は、ちゃっぴさんのおっしゃるとおりです。
たとえば、以下のコードで処理できます。
Option Explicit

Sub Macro1()
 Dim i As Integer
 
 For i = 1 To 6
  With Cells(16 * i - 7, 1)
   .Resize(5, 1) = .Offset(-8, 7).Value
  End With
 Next i
End Sub

>2. A列で空欄になっているセルの行を削除するマクロ
>(A5のセルが空欄であれば5行目を削除)

オートフィルタで空白の行を選択することはできるのではないでしょうか?
まずは、「マクロの記録」で確認してみてください。
あとは、その見えている行をどのように消すのかということです。

>3. A1:O31まで値が入っており、32行以降が全て空欄の場合、I1からO31までの値を切り取りA33以降へ貼り付けるマクロはありますか?

「マクロの記録」をして、あとは、For 〜 Nextを加えて、セルの範囲を修正する
だけです。

>5. 1つのシート上に複数つくったオートシェイプ図形やワードアート文字だけを全て消去するマクロ(セルの幅や高さなどはそのまま変えずに)

以下のURLが参考になるかと思います。
http://park11.wakwak.com/~miko/Excel_Note/17-03_zukei.htm#17-03-43

なお、全般的にいえることですが、ご質問される前に、ヘルプ、過去ログの検索を
し、どうしてもわからない場合は、自分でどこまでできているかを提示するように
してみてください。

【20765】Re:初心者です。教えてください。
お礼  ほい  - 04/12/18(土) 0:00 -

引用なし
パスワード
   Keinさん、 かみちゃんさん 、ちゃっぴさんありがとうございました。

お答えいただいたものをそのまま引用させていただき問題は解決しましたが、
折角いただいたヒントは勉強不足の為、理解できませんでした。
今後、過去ログやヘルプ等を参考にさせていただき、今回教えていただいても
判り得なかった事が理解できるようになることを期待して、ぼちぼち勉強して
いきたいと思います。しかし、それらを見ても理解できない場合や
見落としてしまった場合はまた投稿させていただくと思いますので、
その際はよろしくおねがいします。

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