
またまた投稿しました。
下のように、InputBox関数を用い、マクロ内部のワークシートの名前を指定しようとマクロを書いているのですが、うまくいきません。。どなたか助けてください。よろしくお願いします。
'Work Sheet Selection
InputSheetName:
Dim myStr As String
On Error GoTo ErrHandles
myStr = InputBox(Prompt:="Please" & vbCrLf & "Input Sheet No. ! ", _
Default:=ActiveSheet.Name)
'---(1)Cancel or Blank
If Len(myStr) = 0 Then
MsgBox "Cancel Macro Execution", vbInformation
'---(2)Other Value
ElseIf myStr <> ActiveSheet.Name Then
MsgBox "Sheet" & myStr & "Macro Start", vbInformation
myStr = Worksheets.Name ← コンパイルエラーが発生 !!
End If
Exit Sub
ErrHandle:
'---(3)Error
MsgBox Err.Description & String(2, vbCrLf) & _
"Input Sheet No. again!", vbCritical
'---Re Input sheet No.
Resume InputSheetName
'Data Extracting
Dim x As Long
For x = 0 To 250
Worksheets("FQ.dat").Select
Range(A5).Select '
Selection.Copy
Worksheets("mystr").Select ' ← ココのシートを選択したい!
Range(Cells(x + 31, 3), Cells(x + 31, 6)).Select
ActiveSheet.Paste
Next x
No.10
- 回答日時:
No.9 お礼について
「DeNxt = Sheets(WsName).Cells(Rows.Count, 3).End(xlUp).Row + 1」と「For SoCom = 1 To 4」の間に「If DeNxt < 31 Then denex = 31」を追加してみてください。
No.9
- 回答日時:
こんな事でしょうか?
------------------------------------------------------------------------------
Sub Macro1()
Dim Ws As Worksheet
Dim WsName As String ' 対象ワークシート名
Dim WsOK As Boolean ' ワークシート有無フラグ
Dim SoRow As Long ' 元行番号
Dim SoCom As Long ' 元列番号
Dim DeNxt As Long ' 次コピー先行番号
Do
WsName = InputBox( _
Prompt:="Please" & vbCrLf & "Input Sheet No. ! ", _
Default:=ActiveSheet.Name)
For Each Ws In Worksheets
If Ws.Name = WsName Then WsOK = True
Next Ws
If WsOK = False Then
If MsgBox( _
Prompt:="Sheet not found" & vbCrLf & "Please try again!", _
Buttons:=vbOKCancel + vbDefaultButton1) = _
vbCancel Then Exit Sub
End If
' Cancel → ExitSub
' Other → Loop
Loop Until WsOK
With Sheets("FQ.dat")
For SoRow = 6 To .Cells(Rows.Count, 1).End(xlUp).Row
If Cells(SoRow, 1).Value = WsName Then
DeNxt = Sheets(WsName).Cells(Rows.Count, 3).End(xlUp).Row + 1
For SoCom = 1 To 4
Sheets(WsName).Cells(DeNxt, SoCom + 2).Value = .Cells(SoRow, SoCom).Value
Next
End If
Next
End With
End Sub
------------------------------------------------------------------------------
現場から戻ってきて今確認しました。
凄いですね!! イメージどおりです。
ありがとうございます!!
VBA初心者なのでわからないのですが、これを31行目から表示することは出来ませんか?
1行目から30行目までの間にグラフを入れるので、31行目から設定したいです。
宜しければご教示頂きたくよろしくお願い申し上げます。
No.8
- 回答日時:
元のコードが合っているか微妙ですが
1回目に一致したらC31~F31セルに貼り付け
2回目に一致したらC32~F32セルに貼り付け
以下続くのように最初の行は31行目で良いのですか?
No.7
- 回答日時:
まず
myStr = Worksheets.Name ← コンパイルエラーが発生 !!
これってエラーの原因が判っていないという理解でいいでしょうか?
WorksheetsはWorksheetのコレクションでNameなんて
プロパティはありませんから当然コケますね。
コレクションはとても頻度の高い概念ですから
しっかり理解しましょうね。
sがついて複数形のようなイメージで私は理解しています。
実際には名前ないしは番号を()内に付けることで
そのコレクション中の個々にアクセスします。
あとで出てくる構文にはちゃんとカッコ内にシート名を
選んで選択しているのにどうしてここは端折ったんでしょうね?
なんだこれ、重症だなぁ。
Worksheets("mystr").Select '
Dim myStr As Stringって定義しておきながら
いきなりそれとは全く無関係の"mystr"って文字列
持ってきちゃいましたねぇ。
入力したのは捨てちゃうんだ・・・。
あとマクロ記録だからSelectってよく出てくるけど
あくまでもそれは手で操作しているから、Selectが必要な
ケースは10%以下とおもっていいと思いますよ。
ご指摘ありがとうございます。
VBA初心者なので見よう見まねやっております。
やっぱり上級者はSelectを使わないのですね。
マクロの記録を使いながらやってます。
No.4
- 回答日時:
① 探したい数値を「FQ.dat」シートのA列から探して、その行から下に〇行をまとめて指定のシートに貼り付けると言う事ですか?ちなみに〇行はいくつですか?
② 貼り付け先はアクティブシートでよければ、シート名の確認は不要だと思うのですが…
③ 探したい数値も貼り付け先も同じ「myStr」で指定しているのでしょうか?もしかしたらシート名が数値なのでしょうか?
No.3
- 回答日時:
根本的に何をやりたいのかよく判りません。
元の質問に書かれているならば、その質問のURLを提示してください。特に「'Data Extracting」以降は「FQ.dat」シートの「A5」セルを「mystr」で指定したシートの「C31」~「F281」セルに貼り付けているだけ(同じものを貼り付けるだけ)のような感じですが…良いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 Excelのワークシートを名前を指定してマクロで自動生成
- 2 INPUT関数で入力した日付でワークシートとセルに値をいれる。
- 3 エクセル マクロ セル内にあるシート名のシートを複数指定印刷
- 4 ワークシート関数にVBAでセルを指定するには?
- 5 【ExcelVBA】マクロの入ったシートをコピーしても新しいシート内でマクロを動作させるには?
- 6 INDIRECT関数で他シートから数字を持ってきています。 他シートの一定の行から、関数内にある行を
- 7 マクロ:エクセルVBAでのワークシート関数の参照について
- 8 ワークシート関数(マクロ)を利用した場合のExcelの負担
- 9 エクセル/指定範囲のセル数を返すワークシート関数は?
- 10 VBAでブック内のワークシートを名前をつけて保存
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
Excel シート間の連動を簡単に...
-
5
ExcelでシートAに入力し...
-
6
【エクセル】別シートにある条...
-
7
1つのエクセルファイルに複数...
-
8
エクセルで前シートを参照して...
-
9
EXCEL:同じセルへどんどん足し...
-
10
Google スプレッドシートの表示...
-
11
エクセルで「ウィンドウを元の...
-
12
特定のシートの削除を禁止した...
-
13
エクセルで前のシートを連続参...
-
14
Excelで金銭出納帳。繰越残高を...
-
15
エクセルでファイルを開いたと...
-
16
excelでシート毎の最終更新日を...
-
17
複数のシートの同じセルに入力...
-
18
エクセルで複数シートを別のシ...
-
19
複数シートの固定のセルの値を...
-
20
エクセルのシート名をリスト化...
おすすめ情報
VBAに関する質問が2回目ということで、また。。。という表現を使いました。
言葉足らずですね。
私がやりたい事は、 InputBoxに入力された数値を 元データ(今回の場合「FQ.dat」)にある数値から検索し 自動的に他のシートへコピペしようするマクロを考えています。VLOOKUP関数みたいな
感じです。
「Data Extracting 」以降の構文がどういうわけか抜けていますね。
正しくは、
Worksheets("FQ.dat").Select
Range(Cells(29 * x + (6), 1), Cells(29 * x + (6), 4)).Select '
です。
InBoxを使用してシートを指定すること(シート名は元データ内にあるセルの値と同じ)でマクロが実行されると考えているのですが。。。。
どのように処理したら良いかわかりますか。。。?
①,② 現在、探したい数値は 、A列 6行から規則的に29行おき6937行まで存在します。
A B C D
6 10.87 109.5 50.9 -3
7 10.38 88.8 35.8 -7
.. .. .. .
35 10.87 208.3 352.1 2
36 10.38 156.8 5.8 -10
このようなデータが29行おきに 元データに配置されています。
これをA行は、「シート名」に使用し、B行からD行を各振り分けられたシートへ
コピペしたいです。
③ 仰るとおり、シート名は数値です。
よろしくお願いします。
選択されたシートへの貼り付け先の行は固定です。
貼り付けは1行のみでは、1シートに250行、増えると800行になります。
よろしくお願いします。
貼り付け先がどの行というか、
一つのシートに複数回データを下へ貼り付けて行き
元データのCellの値がBLANKになった時点で、
元データの次の行へ移り、別のシートへ貼り付ける
という作業です。