
またまた投稿しました。
下のように、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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数シートの特定の位置に連番...
-
エクセルの複数シートの保護を...
-
前の(左隣の)シートを連続参...
-
別シート参照のセルをシート毎...
-
特定のシートの削除を禁止した...
-
エクセルで複数設定したハイパーリンク先...
-
EXCELで1ヶ月分の連続した日付...
-
シートの保護のあとセルの列、...
-
excelでシート毎の最終更新日を...
-
エクセルでファイルを開いたと...
-
エクセルで前のシートを連続参...
-
Excelのシートを、まとめて表示...
-
複数のピボットを同じフィルタ...
-
EXCELで同一フォーマットのシー...
-
エクセルで前シートを参照して...
-
Excel、同じフォルダ内のExcel...
-
エクセルのシート名をリスト化...
-
シートを任意の日付で自動で作...
-
エクセルVBA 串刺し計算の際、...
-
日報をエクセルで作成したいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
エクセルでファイルを開いたと...
-
エクセル 計算式も入っていない...
-
EXCEL:同じセルへどんどん足し...
-
エクセルで前シートを参照して...
-
Excelのシートを、まとめて表示...
-
Excel、同じフォルダ内のExcel...
-
複数シートの特定の位置に連番...
-
Excelで金銭出納帳。繰越残高を...
-
特定のシートの削除を禁止した...
-
エクセルで複数設定したハイパーリンク先...
-
EXCELで1ヶ月分の連続した日付...
-
VBAで条件によりフォントサイズ...
-
シートの保護のあとセルの列、...
-
至急お願いします。エクセルシ...
-
VBAでシートコピー後、シート名...
-
エクセルで毎回1枚目のシートを...
-
エクセルで前のシートを連続参...
おすすめ情報
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になった時点で、
元データの次の行へ移り、別のシートへ貼り付ける
という作業です。