5/27 回答が連続投稿される不具合が発生しております

テキストボックスに入力したのと同じ名前のシートに移動することは出来ますか?
出来るならテキストボックスのオブジェクト名をsheetnameとして、
マクロコードを教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Sheets(sheetname.Text).Select

    • good
    • 1
この回答へのお礼

うまくいきましたありがとうございます。

お礼日時:2005/10/08 02:59

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルVBAで、条件に一致するセルへ移動

 エクセルVBAでシート内を検索し、条件に一致するセルを選択させたいのですが、どのようにしたら良いでしょうか?
 同一データはシート内に一つしか無い前提です。
勉強不足ですみませんが、どなたかご教授お願いします。

Aベストアンサー

こんにちは。maruru01です。

Findメソッドがいいでしょう。
こんな感じ


Dim rg As Range

Set rg = ActiveSheet.Cells.Find(What:="検索文字列")
If rg Is Nothing Then
  MsgBox "シート内には見つかりませんでした。"
Else
  rg.Select
End If


Findメソッドの詳細は、VBAのヘルプを参照して下さい。

Qエクセル:シート名を手入力でなく、セル「A1」の文字を出したい。

いつもお世話になります。
エクセルのシート名についての質問です。
いつもはシート名を変えるとき、シートタブの上を右クリックして「変更」しています。

◆そこで、
(1) セル「A1」に入力されてある文字を自動で出す
(2) もしくはマクロボタンを押すと「A1」に入力されてあるものが「シート名」として変わる

というようにしたいのですが、その方法について教えてください。よろしくお願いいたします。

Aベストアンサー

こんにちは。


(1)の場合は、下記のコードを ThisWorkbook に記述してください。
どのワークシートでも機能します。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$A$1" Then Sh.Name = Target.Range("A1").Value
End Sub


(2)場合は、下記のコードを標準モジュールに記述しボタンにマクロ登録してください。
(すべてのシートにボタンを貼り付けるのは面倒でしょうから、ツールバーにボタンとして追加すると良いと思います。)

Public Sub SheetName()
ActiveSheet.Name = Range("A1").Value
End Sub

Qマクロ セルに入力されたシートを選択する

なかなか理解出来ない初心者です。
セルに入力したシート名で、そのシートを選択するマクロの記述はどうするのでしょうか?
また、そのシートが選択された時にメッセージを出力したいです。
御指導お願い致します。

Aベストアンサー

こんにちは!
一例です。
Sheet1のA1セルにSheet名が入力してあるとします。

標準モジュールに

Sub test()
Dim str As String
str = Worksheets("Sheet1").Range("A1")
Worksheets(str).Select
MsgBox str & "を開きました。"
End Sub

こんなんではどうでしょうか?m(_ _)m

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

QWorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

よろしくお願いします。
今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは

ここから////////
'ブックを開く
Workbooks.Open コピー元のブックのパス
'シートをコピー
Worksheets.Item(コピーするシート名).Copy _
after:=Workbooks(コピー先のブック名).Sheets(1)

'ブックを閉じる
Application.DisplayAlerts = False
Workbooks.Item(コピー元のブック名)Close True
Application.DisplayAlerts = True
ここまで////

なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。
ご存知の方がいらっしゃいましたら、ご教授お願いします。

Aベストアンサー

画面のチラツキを押さえたいだけなら、画面の更新をやめればいいだけじゃないでしょうか?

ブックを開く前に
Application.ScreenUpdating = False
ブック閉じてから
Application.ScreenUpdating = True

QExcel VBA でテキストボックスの値をセルA列から検索

いつもお世話になります。
Private Sub CommandButton3_Click()
Dim 行 As String
Dim 列 As String
Dim 最終行 As String
Dim 検索行 As String
Dim メッセージ As Integer
Dim 一致 As Range
Dim myNO As Variant
Dim i As Long
Sheets(3).Select
最終行 = Range("A2").End(xlDown).Offset(1).Select
行 = ActiveCell.Row
列 = ActiveCell.Column
myNO = TextBox2.Value
検索行 = Range("A2").End(xlDown).Select
※・・・Set 一致 = Range("A2:検索検").Findwhat:=TextBox2,lookat:=xlWhole)
If 一致 Is Nothing Then
MsgBox "データがありません。新規コード入力します。"
Cells(行, 列 + 0) = UserForm1.TextBox2.Value
Cells(行, 列 + 1) = UserForm1.ComboBox7.Value
Else
i = Cells(行 - 1, "A")
Cells(i, 列 + 0) = UserForm1.TextBox2.Value
Cells(i, 列 + 1) = UserForm1.ComboBox7.Value
End If
End Sub

「エラー1004'Range'メソッドは失敗しました'Global'オブジェクト」とでます。※印が黄色になっています。
ユーザーフォーム1のテキストボックスの値をシート3のA列から検索して、一致すれば、A列の一致セルに上書き入力して、一致が無い場合はA列の空白セルに追加入力したいのです。よろしくお願い致します。

いつもお世話になります。
Private Sub CommandButton3_Click()
Dim 行 As String
Dim 列 As String
Dim 最終行 As String
Dim 検索行 As String
Dim メッセージ As Integer
Dim 一致 As Range
Dim myNO As Variant
Dim i As Long
Sheets(3).Select
最終行 = Range("A2").End(xlDown).Offset(1).Select
行 = ActiveCell.Row
列 = ActiveCell.Column
myNO = TextBox2.Value
検索行 = Range("A2").End(xlDown).Select
※・・・Set 一致 = Range("A2:検索検").Findwhat:=TextBox2,lookat:=xlWhole)
...続きを読む

Aベストアンサー

えっと、いろいろ改善の余地があるマクロなので、気がついたところを指摘していきます。

Dim メッセージ As Integer

この変数は使われてないので宣言は不要かと思います。(もし質問文のVBAが抜粋で、後で使うのなら別ですが)

最終行 = Range("A2").End(xlDown).Offset(1).Select

この「最終行」に範囲をSelectした結果を代入しているのは、意味がありません。最終行には True が代入されます。最終行のセル番地を代入したいのであれば、

最終行 = Range("A2").End(xlDown).Offset(1).Addresss

とする必要がありますが、その次の2行で行と列を取得しており、そして変数「最終行」はプロシージャの最後まで使われていません。

myNO = TextBox2.Value

この変数も最後まで使われていません。Findの引数として使おうとしたのかと思いますが、Findではもう一度TextBox2と書いてしまっています。

検索行 = Range("A2").End(xlDown).Select

これも先の最終行と同じく、Selectした結果を代入しているため、Trueが代入されてしまいます。今までの指摘は、マクロの動作に影響を与えるものではありませんでしたが、ここは違います。この後で検索範囲の一番下のセルとして使おうとしても、これではその番地が代入されないのです。

その次の、

Set 一致 = Range("A2:検索検").Findwhat:=TextBox2,lookat:=xlWhole)

は書式が崩れてますがですが、多分書きたいことは

Set 一致 = Range("A2:検索行").Find(what:=TextBox2,lookat:=xlWhole)

ですよね。しかし"A2:検索行"という範囲指定はできません。「検索行」は変数なので文字列に含めてしまってはいけません。「検索行」にセル番地が入っているのであれば、Range("A2:" & 検索行) あるいは Range("A2",検索行") のようにしないと正しく領域を指定できません。

以上を踏まえて、Range型の変数を使うようにして書き直してみました。

Private Sub CommandButton3_Click()
 Dim 最終行 As Range 'Stringから変更
 Dim 検索行 As Range 'Stringから変更
 Dim 一致 As Range
 Sheets(3).Select
 Set 検索行 = Range("A2").End(xlDown)
 Set 最終行 = 検索行.Offset(1)
 Set 一致 = Range("A2", 検索行).Find(what:=TextBox2, lookat:=xlWhole)
 If 一致 Is Nothing Then
  MsgBox "データがありません。新規コード入力します。"
  最終行.Value = UserForm1.TextBox2.Value
  最終行.Offset(0, 1).Value = UserForm1.ComboBox7.Value
 Else
  一致.Value = UserForm1.TextBox2.Value '同じ値なので本来は不要
  一致.Offset(0, 1).Value = UserForm1.ComboBox7.Value
 End If
End Sub

えっと、いろいろ改善の余地があるマクロなので、気がついたところを指摘していきます。

Dim メッセージ As Integer

この変数は使われてないので宣言は不要かと思います。(もし質問文のVBAが抜粋で、後で使うのなら別ですが)

最終行 = Range("A2").End(xlDown).Offset(1).Select

この「最終行」に範囲をSelectした結果を代入しているのは、意味がありません。最終行には True が代入されます。最終行のセル番地を代入したいのであれば、

最終行 = Range("A2").End(xlDown).Offset(1).Addresss

...続きを読む

Q配列の参照渡しで型が一致しません。

エクセル2003です。
いつもお世話になります。
以下のコードを実行すると「配列の型が一致しません。」というエラーが出ます。
typeNameで確認しても配列の型はvariant()で正しいと思うのですが。。。
皆様のお知恵を拝借させていただけないでしょうか。

--------------------------------------
Sub main()
Dim e As Variant
e = fuN()
Call pRo(e)  '←ここでエラーになる。
End Sub

Function fuN() As Variant
Dim a(0) As Variant
a(0) = "zero"
fuN = a
End Function

Sub pRo(ByRef c() As Variant)
'処理っす
End Sub
--------------------------------------

Aベストアンサー

簡単にいっていまうと、Variantは小難しい事を考えなくてもそういう風に使えるよ、っていうことです。
イメージ的にはVriant型のでっかい変数の中にVariantの配列が入ってるみたいな感じですかね。

参考URL:http://pc.nikkeibp.co.jp/article/NPC/20070803/279065/

Qコマンドボタンをクリックでシートからシートに移動させたい

sheet1にコマンドボタンをつくり、これをクリックすると
sheet2に移動するという風にしたいです。
sheet1は名前が 入力画面
sheet2は名前が 合計 となっています。
この時のコードをどう入力すべきか教えていただきたいです。
Private Sub CommandButton1_Click()と
End Sub
の間に何を入力するべきか正確に教えてください。
よろしくお願いします。

Aベストアンサー

シート【合計】をアクティブにするのなら

Private Sub CommandButton1_Click()
Worksheets("合計").Activate
End Sub

とか?

Q数値入力で簡単に該当のセルへ移動できませんか?

エクセル2007(2010)です。

行が名前(約50名)、列が1~12月となっています。
「3月、山田、500万」という伝票があります。
伝票はランダムに出てきますので、毎回名前を探して、該当のセルに数値を入力します。

そんなに量が多くないので、毎回スクロールして探していますが、
簡単に該当のセルに飛ぶ方法はないものでしょうか?

それが出来たら他の表にも応用したいと思っています。
宜しくお願いします。

Aベストアンサー

こんにちは。

私ならば,入力用のフォームをVBAで作るでしょう。フォームの名前のリストと月のリストを選択して数値を入力すれば,しかるべきセルに値が入るようなプログラムです。

これ位ならば,簡単でしょう(私には・・・)。ちょっとExcel VBAを勉強すれば出来ますよ。それができれば応用が利きます。


人気Q&Aランキング

おすすめ情報