マイクロソフト・エクセル97

sheet1上で作った『ユーザー入力フォーム(VB)』を
sheet2からマクロの実行をしても、ユーザー入力フォームのデータがsheet2のものになっています。

sheet2からマクロを実行しても、きちんとsheet1のデータを反映させた(データ表示)いのですが、方法がわかりません。
  sheets(sheet1).Select

の記述をしてはみたのですが…。
とりあえず上の記述でうまくいくのですが、この方法でセーブし終了すると、『不正な処理をしたために…プログラムを強制的に終了します』が出てしまします。

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

A 回答 (2件)

提示されたコードにはPrivate、Publicが種々あり、コードがシート1かユーザーフォームか、またはモジュールのどのコードウインドウに書かれたのか不明で、コードも部分的と思えますし、起動方法も分からないのでかなりの部分は想像で書いています。

100%理解できていません。
少しでも進展すればいいですが・・・。試してみて下さい。

●Dim トト結果記録, TBL(1 To 57) As Control
 Dim データ範囲 As Range
      ↓
   2行はコメント行にする。
   標準モジュールに(を追加し)、以下を追加。この57個のコントロールの意味は分かりません。
     Public トト結果記録, TBL(1 To 57) As Control
     Public データ範囲 As Range
     Public ws1 As WorkSheet

●Private Sub UserForm_Initialize()
   Comboチーム011.AddItem "-------J1"
        :
   Set データ範囲 = Range("A1").CurrentRegion
      ↓
     Private Sub UserForm_Initialize()
       Set ws1 = WorkSheets("Sheet1")  '追加
       Comboチーム011.AddItem "-------J1"
            :
       Set データ範囲 = ws1.Range("A1").CurrentRegion  '修正

●Public Function レコード数取得() As Integer
   レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1
      ↓
   レコード数取得 = ws1.Range("A1").CurrentRegion.Rows.Count - 1  '修正

●Public Sub データ表示(行数 As Integer)
   Dim トト結果記録, Cnt As Integer
      ↓
   Dim Cnt As Integer  '修正、二重定義になっている?
    • good
    • 0
この回答へのお礼

おかげで解決しました。
ありがとうございました。
今後ともよろしくお願いします。

お礼日時:2001/05/15 12:02

どのようなコードをかかれているか分かりませんが、UserForm_Initialize を例にして、TextBox1にSheet1のセルA1を表示するには



Private Sub UserForm_Initialize()
With Worksheets("Sheet1")
TextBox1 = .Range("A1")
End With
End Sub

のようにSheet1のセル範囲ということを明記したらどうでしょうか。該当シートをACTIVEにする必要は無いような気がします。

また、例でいえばTextBox1のControlSourceに"A1"(Sheet1のつもり)をセットされていれば、"Sheet1!A1"とすればいいと思います。
保存も問題なくできるはずです。

この回答への補足

> With Worksheets("Sheet1")
でやってみたのですが、うまくいきませんでした。
マクロの記述は書きのとおりです。
(一部省略)

アドバイス、お願いします。

----------------

Dim トト結果記録, TBL(1 To 57) As Control
Dim データ範囲 As Range

Private Sub UserForm_Initialize()

Comboチーム011.AddItem "-------J1"
Comboチーム011.AddItem "市原"
Comboチーム011.AddItem "磐田"
Comboチーム011.AddItem "浦和"

Spinトト節.Max = レコード数取得 + 1

Set TBL(1) = Textトト節
Set TBL(2) = Comboチーム011
Set TBL(3) = Frame結果1
Set TBL(4) = Comboチーム012

Set データ範囲 = Range("A1").CurrentRegion
If データ範囲.Rows.Count = 1 Then
Else
データ表示 2
End If
End Sub

Public Function レコード数取得() As Integer
レコード数取得 = Range("A1").CurrentRegion.Rows.Count - 1
End Function
Public Sub データ表示(行数 As Integer)

Dim トト結果記録, Cnt As Integer
For Cnt = 1 To 57

Select Case Cnt
Case 3
If データ範囲.Cells(行数, Cnt).Value = "H○" Then
Option試合結果011.Value = True
Else
If データ範囲.Cells(行数, Cnt).Value = "H△" Then
Option試合結果010.Value = True
Else
Option試合結果012.Value = True
End If
End If
Case Else
TBL(Cnt).Value = データ範囲.Cells(行数, Cnt).Value
End Select
Next
Textトト節.Value = Spinトト節.Value - 1
End Sub
Private Sub Spinトト節_Change()

If データ範囲.Rows.Count <> 1 Then
データ表示 (Spinトト節.Value)
End If
End Sub

Private Sub Button追加_Click()
Dim AddRow As Integer
AddRow = データ範囲.Rows.Count + 1
データ書き込み (AddRow)

Textトト節.Text = Spinトト節.Value - 1 & "/" & レコード数取得
Set データ範囲 = Range("A1").CurrentRegion
Spinトト節.Max = データ範囲.Rows.Count
Spinトト節.Value = データ範囲.Rows.Count
データ表示 (AddRow)
End Sub

Public Sub データ書き込み(行数 As Integer)
Dim Cnt As Integer
For Cnt = 1 To 57
Select Case Cnt
Case 3
If Option試合結果011.Value = True Then
データ範囲.Cells(行数, Cnt).Value = "H○"
Else
If Option試合結果010.Value = True Then
データ範囲.Cells(行数, Cnt).Value = "H△"
Else
データ範囲.Cells(行数, Cnt).Value = "H×"
End If
End If
Case Else
データ範囲.Cells(行数, Cnt).Value = TBL(Cnt).Value
End Select
Next
End Sub

Private Sub Button登録書込み_Click()
データ書き込み (Spinトト節.Value)
End Sub

Private Sub Button終了_Click()
トトデータ.Hide
End Sub

補足日時:2001/05/13 23:04
    • good
    • 0

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

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

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

Qsheet2の420列のデータを新たにsheetを7つ作成して60列ずつコピーするマクロ

sheet2にA1、B1~A420,B420までのデータ
例えば
A1:pinapple B1:パイナップル
A2:apple B2:リンゴ
A3:pen B3:ペン
・・・・・・・・
・・・・・・・・
・・・・・・・・
・・・・・・・・
A420:banana B420:バナナ
が入っています。

sheet3~sheet9(追加sheetは7つ)までを新たに作成して
①sheet3には、A1、B1~A60,B60
②sheet4には、A61、B61~A121,B120
③・・・・・・・・
④・・・・・・・・
⑤・・・・・・・・
⑥・・・・・・・・
⑦sheet9には、A361、B361~A420,B420
という具合に、sheet2のA1、B1~A420,B420のデータを60列ずつコピーさせてたいです。

どのようなマクロを作成すれば良いでしょうか?
実際は、データは単語ではなく文です。
Excel2013を使っています。

Aベストアンサー

こんにちは!

一例です。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, wS As Worksheet
With Worksheets("Sheet2")
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row Step 60
If Worksheets.Count < i + 2 Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
End If
Set wS = Worksheets(Worksheets.Count)
.Cells(i, "A").Resize(60, 2).Copy wS.Range("A1")
wS.Columns.AutoFit
Next i
End With
End Sub

※ シート名には手を付けていません。m(_ _)m

こんにちは!

一例です。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, wS As Worksheet
With Worksheets("Sheet2")
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row Step 60
If Worksheets.Count < i + 2 Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
End If
Set wS = Worksheets(Worksheets.Count)
.Cells(i, "A").Resize(60, 2).Copy wS.Range("A1")
...続きを読む

QExcel2013 VBA sheet1とsheet2のデータを合成してsheet3を作るには

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 C3;うた

A4;2  B4;読書 C4;どくしょ
A5;空白 B5;野球 C5;やきゅう


A6;3 B6;映画鑑賞 C6;えいがかんしょう

A7;4  B7;釣り C7;つり
A8;空白 B8;踊り C8;おどり
A9;空白 B9;歌 C9;うた

③sheet3を新に作成して

A1;1 B1;阿部 C1;あべ
A2;空白  B2;釣り C2;つり
A3;空白 B3;踊り C3;おどり
A4;空白 B4;歌 C4;うた
A5;空白 B5;阿部 C5;あべ

A6;2 B6;佐藤 C6;さとう
A7;空白 B7;読書 C7;どくしょ
A8;空白 B8;野球 C8;やきゅう
A9;空白 B9;佐藤 C9;さとう

A10;3 B10;山名 C10;やまな
A11;空白 B11;映画鑑賞 C11;えいがかんしょう
A12;空白 B12;山名 C12;やまな

A13;4 B13;山本 C13;やまもと
A14;空白  B14;釣り C14;つり
A15;空白 B15;踊り C15;おどり
A16;空白 B16;歌 C16;うた
A17;空白 B17;山本 C17;やまもと



のようにしたいです。

実際、データは、sheet1は419列、sheet2は2563列あります。

sheet1に氏名、sheet2にその氏名の人の趣味が入っています。

新たにsheet3を作成して、
氏名1
趣味
氏名1

氏名2
趣味
氏名2

氏名3
趣味
氏名3

氏名4
趣味
氏名4

としたいです。
VBAのコードを教えて下さい。

例えば
①sheet1には
A1;1 B1;阿部 C1;あべ
A2;2 B2;佐藤 C2;さとう
A3;3 B3;山名 C3;やまな
A4;4 B4;山本 C4;やまもと

②sheet2にはその人の趣味が入っています。

A1;1  B1;釣り C1;つり
A2;空白 B2;踊り C2;おどり
A3;空白 B3;歌 ...続きを読む

Aベストアンサー

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = wS2.Cells(Rows.Count, "B").End(xlUp).Row
Range(wS2.Cells(2, "D"), wS2.Cells(lastRow, "D")).Formula = "=IF(A2="""",D1,A2)"
For i = 1 To wS1.Cells(Rows.Count, "A").End(xlUp).Row
With .Cells(Rows.Count, "B").End(xlUp).Offset(1)
.Value = wS1.Cells(i, "B")
.Offset(, -1) = wS1.Cells(i, "A")
.Offset(, 1) = wS1.Cells(i, "C")
End With
Set c = wS2.Range("A:A").Find(what:=wS1.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
myCnt = WorksheetFunction.CountIf(wS2.Range("D:D"), wS1.Cells(i, "A"))
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(myCnt, 2).Value = _
c.Offset(, 1).Resize(myCnt, 2).Value
End If
'▼
.Cells(Rows.Count, "B").End(xlUp).Offset(1).Resize(, 2).Value = _
wS1.Cells(i, "B").Resize(, 2).Value
'▲
Next i
.Rows(1).Delete
wS2.Rows(1).Delete
wS2.Range("D:D").Delete
Application.ScreenUpdating = True
.Activate
End With
MsgBox "完了"
End Sub

※ コード内の▼から▲までがもう一度Sheet1のデータを表示させているコードです。
細かい検証はしていませんが、
こんな感じではどうでしょうか?m(_ _)m

こんばんは!

Sheet3にSheet1のデータを二度表示させるのがイマイチ理解できませんが、
ご質問通りにやってみました。

Sub Sample1()
Dim i As Long, lastRow As Long, myCnt As Long
Dim c As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS2.Rows(1).Insert
wS2.Range("D:D").Insert
With Worksheets("Sheet3")
.Cells.ClearContents
lastRow = ...続きを読む

Qマクロでの次の実行マクロへの記述

下記のマクロを記述しました。
一つのマクロ処理を終わらせて、次のマクロ(例:test)を動かしたいのですが何処に
記述したら良いかわかりません。
教えてください。

Sub Macro1()
Dim i As Integer
Dim buff As String
i = 2
While 1
If Range("B" & i).Value = "" Then
End
End If
buff = Range("B" & i).Value
Range("B" & i).Value = Left(buff, 7) + " " + Mid(buff, 8, 5) + " " + Right(buff, 6)
i = i + 1
Wend
  Call test →ここに仮に記述したのですが、testのマクロに行きません。
End Sub
以上

Aベストアンサー

gonta_gomaさんとほとんど同じ?違う?

Sub Macro1()
  Dim i As Integer
  Dim buff As String

  i = 2
  buff = Range("B" & i).Value
  While buff <> ""
    Range("B" & i).Value = Left(buff, 7) & " " & Mid(buff, 8, 5) & " " & Right(buff, 6)

    i = i + 1
    buff = Range("B" & i).Value
  Wend

  Call test
End Sub

QWarksheetにある全てのsheetに同じマクロをいっぺんに実行する方法はあるんでしょうか?

Warksheetにある全てのsheetに同じマクロをいっぺんに実行する方法はあるんでしょうか?

Aベストアンサー

Sub Macro1()
Dim ws As Worksheet
For Each ws in Worksheets
Call Macro2(ws)
Next ws
End Sub

Sub Macro2(ws As Worksheet)
With ws
'処理実行
End ws
End Sub

こういう流れじゃないですか?


このカテゴリの人気Q&Aランキング

おすすめ情報