Excel 2003と2007の違いは?職場のPCと自宅PCでの問題

このQ&Aのポイント
  • Excel 2003と2007の違いについて質問です。職場のPCはWindows XPでExcel 2003を使用しており、自宅PCはWindows 7でExcel 2007を使用しています。職場では自分専用の端末がないため、自宅でコードを書いてUSBメモリにコピーし、職場でペーストして使用しています。しかし、職場のPCでは「オブジェクトが必要です」というエラーが発生します。具体的にどこにエラーがあるのかがわからず困っています。
  • Excel 2003と2007の違いによる問題です。職場のPCではExcel 2003が、自宅PCではExcel 2007が使用されています。職場では自身の端末がないため、自宅でコードを作成し、USBメモリに保存して職場で使用しています。しかし、職場のPCで「オブジェクトが必要です」というエラーが発生し、どこにエラーがあるのか特定できません。
  • Excel 2003と2007の違いによる問題です。職場のPCではWindows XPでExcel 2003が、自宅PCではWindows 7でExcel 2007が使用されています。職場では自身の端末がないため、自宅でコードを作成し、USBメモリに保存して職場で使用しています。しかし、職場のPCで「オブジェクトが必要です」というエラーが発生し、具体的にどこにエラーがあるのか特定できません。
回答を見る
  • ベストアンサー

excel 2003 と 2007 の違い?

職場のPC ・windowsXP ・excel2003 自宅PC ・windows7 ・excel2007  職場には自分専用端末がないので、自宅でコードを書いてUSBメモリにコピーし、 職場でペーストするという環境で起きた問題です。  やりたいことは、顧客から送られてくるデータを sheet1 に保存し、 sheet2 に置いてあるマスターデータを参照して不必要な行を削除するマクロです。  以下、コード _______________________ Sub 別シート参照デリート() Dim st1, st2 As Worksheet Set st1 = ThisWorkbook.Sheets("sheet1") '作業用シート Set st2 = ThisWorkbook.Sheets("sheet2") 'マスターシート Dim st1Row, st2Row As Integer st1Row = st1.Cells(Rows.Count, 1).End(xlUp).Row st2Row = st2.Cells(Rows.Count, 1).End(xlUp).Row Dim st1value, st2value As String Dim i, j As Integer 'マスターシートを参照して必要ないものは削除する For i = st1Row To 1 Step -1 st1value = st1.Cells(i, 3).Value For j = st2Row To 1 Step -1 st2value = st2.Cells(j, 1).Value If st1value = st2value Then Exit For '該当するなら必要行なので次へ ElseIf j = 1 Then st1.Cells(i, 3).EntireRow.Delete 'st2の先頭行は"品番"なので不必要=削除 End If Next j Next i End Sub _______________________  自宅環境では問題なく動作するのですが、職場のPCだと ”オブフェクトが必要です” のエラーが返ってきます。 かといって、どの構文でエラーが出ているのか教えてくれない(反転しない)んです。  どこにエラーがあるのでしょうか?  よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

なーんか変ですね。 バージョンが微妙に異なりますが 当方(WinXP & Excel2002 とWin7 & Excel2010)ではエラーになりませんでした。 変数宣言の4行は修正するとしても解決には至らないような気がします。 社PCで互換パックを使用して、xlsm 形式を開いているとか。 http://support.microsoft.com/kb/923505/ja 自PC・社PCで、デバッグ→コンパイルが通るかどうか。 ツール → 参照設定 で参照不可になっているものがないか。 を調べてみては? 以上でも解決しないとなると、 社PCで新規XLSファイルにシートをコピペ、コードもコピペで 何とかなるかも?

classical
質問者

補足

 わざわざの試験運用、ありがとうございます。  そちらでもエラーは出ませんでしたか・・・  >社PCで互換パックを使用して、xlsm 形式を開いている  これに関しては調査済みでした。  残り二つ、及び新規作成については、調査&検証してみたいと思います。  本日(土曜日)は職場でPCを扱えなかったので、月曜日(というかPCが使えた日w)に試してみます。  当「補足」欄に追記できないようなので、後日「お礼」欄で報告も兼ねて経過を掲載いたします。

その他の回答 (1)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

自信はありませんが Dim st1Row, st2Row As Integer ですが Dim st1Row As Integer, st2Row As Integer http://denki.nara-edu.ac.jp/~yabu/soft/excel-vba-basic.html#3 を参考に!!

classical
質問者

お礼

 遅くなってすいません。  本日実行してみた結果をお伝えします。  えぇと、こちらの方法では解決には至りませんでした。  しかしながら、このようなルールを教えて下さったことには感謝しております。これからは、こういった小さなルール?も参考にしていきたいと思います。  ありがとうございました。

classical
質問者

補足

 このような取り決めがあったのですね!  ともあれ、本日(土曜日)は職場でPCを扱えなかったので、月曜日(というかPCが使えた日w)に試してみます。  当「補足」欄に追記できるか分かりませんので、後日「お礼」欄で報告も兼ねて経過を掲載いたします。

関連するQ&A

  • Excel VBAで検索する

    Excel VBAで、Sheet1に貼り付けたテキスト内から Sheet2に記載した(1列ごとの)キーワードを検索し キーワードが含まれている行をSheet3に貼り付ける処理をしているのですが、始めたばかりなので上手くいきません。 下記がソースです。 Dim moji As String Dim word As String Dim result As Integer For i = 3 To 103 For j = 2 To 21 moji = ThisWorkbook.Worksheets("Sheet1").Cells (i, 1).Value word = ThisWorkbook.Worksheets("Sheet2").Cells (j, 2).Value result = InStr(moji, word) If doResult <> 0 Then For k = 1 To 100 ThisWorkbook.Worksheets("Sheet3").Cells (k, 1).Value= moji Next k End If Next j Next i このソースでは上手くいかないのですが、どこがダメなのか分からないので、解決の糸口がつかめません。 アドバイスなどお願いします。

  • Excel VBA ユーザフォームの検索について

    添付の画像のようなユーザフォームを作っています。 TextBox1に検索ワードを入力して、CommandButton1をクリックすると、下のComboBox1に一覧が出るようにしたいと思い、ほかのサイトから下記のコードを見つけて、作ってみました。参照先のsheet2を表示しているときは大丈夫なのですが、別のシートを選んでいるとエラーになります。 sheetは3つあり、それぞれ違うリストが入力されています。今回はsheet2のリストを参照したいのですが、最初はsheet1が表示されている状態で実行したいです。 エラーの内容は 実行時エラー9 インデックスが有効範囲にありません。 コチラがコードです。 Private Sub UserForm_Initialize() Dim i As Long, imax As Long Dim tbl() As Variant imax = ThisWorkbook.Worksheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row ReDim tbl(imax) For i = 1 To imax tbl(i) = Range("A" & i).Value Next i With ComboBox1 .List() = tbl() End With End Sub Private Sub CommandButton1_Click() Dim i As Long, imax As Long Dim tbl() As Variant Dim cnt As Long, j As Long j = -1 With ThisWorkbook.Worksheets("sheet2") imax = .Cells(Rows.Count, "A").End(xlUp).Row cnt = Application.CountIf(Range("A1:A" & imax), "*" & TextBox1.Text & "*") ReDim tbl(cnt) For i = 1 To imax If InStr(.Range("A" & i), TextBox1.Text) > 0 Then j = j + 1 tbl(j) = Range("A" & i).Value ←この部分がエラーになる End If Next i End With With ComboBox1 .List() = tbl() End With End Sub どこを直せば良いか、教えてください。 よろしくお願いします。

  • エクセルVBAのFINDの質問です。

    エクセルVBAのFINDの質問です。 シート1    A    B    C     D 1 コード1 コード2 コード3 名 称 2  4    1     1 3  4    2     2 4  4    3     1 シート2    A    B 1 コード1 名 称 2  1   名称1 3  2   名称2 やりたいことは、シート1のD列に、シート1のコード3をもとにシート2から名称を取得したいのです。 下記に記したプログラムだと最初のFINDNEXTは動くのですが、 2回目でエラーになってしまい、次を読んでくれません。 どなたか、ご教授頂けますでしょうか。 シート1の検索条件はコード1の"4"です。 シート1のコード1は重複キーで、一レコードずつ読んで行き、各レコード毎にシート2を読みたい のです。 Dim シート1 As Worksheet Dim シート2 As Worksheet Dim obj As Object Dim Lin As Integer Dim mykey As Integer Dim obj1 As Object Dim Lin1 As Integer Dim mykey1 As Integer Dim st_Lin As Integer Set シート1 = ThisWorkbook.Worksheets("シート1") Lin = シート1.Cells(シート1.Rows.Count, 1).End(xlUp).Row mykey = "4" Set obj = シート1.Range("A1", "A" & Lin).Cells.Find(What:=mykey, _ LookIn:=xlValues, _ lookat:=xlWhole, _ SearchOrder:=xlByColumns) If obj Is Nothing Then   MsgBox ("異常です")   Exit Sub Else   st_Lin = obj.Row   Do Until obj.Row <> st_Lin    Set obj = シート1.Range("A1", "A" & Lin).FindNext(obj)    If obj Is Nothing Then     Exit Do    Else     Set シート2 = ThisWorkbook.Worksheets("シート2")       With シート2          Lin1 = .Cells(シート2.Rows.Count, 1).End(xlUp).Row          mykey1 = シート1.Cells(obj.Row, 3).Value          Set obj1 = .Range("A1", "A" & Lin1).Cells.Find          (What:=mykey1,LookIn:=xlValues,lookat:=xlWhole,SearchOrder:=xlByColumns)          If obj1 Is Nothing Then           MsgBox ("名称取得できませんでした")           Exit Sub          Else            シート1.Cells(obj.Row, 4).Value = .Cells(obj1.Row, 2).Value          End If       End With    End If   Loop End If

  • エクセル マクロ 抽出

    教えてください。 ○と記入されたセルを参照して、一つ上のセル・A列にある同じ行のセル・ 9行目にある同じ列のセルを抽出しようとしています。 下記の通り入力すると 行数=値.Rowでエラーが出たしまいました。 試行錯誤頑張りましたが解決できそうにありませんのでお力を貸して頂けないでしょうか。 Sub 抽出() Dim i, 行数, 列数 As Long Dim 値 As Range i = 0 行数 = 値.Row 列数 = 値.Column For Each 値 In Sheets("sheet1").Range("C12:R171") If 値.Value = "○" Then i = i + 1 With Sheets("sheet2") .Cells(i, 3).Value = Sheets("sheet1").Cells(行数, 1).Value .Cells(i, 4).Value = Sheets("sheet1").Cells(9, 列数).Value .Cells(i, 5).Value = 値.Offset(-1, 0).Value End With End If Next End Sub

  • エクセルの勤務表(マクロ)についての質問です。

    エクセルの勤務表から、日付別に出勤者とその出勤者の勤務を抜き出すマクロを作りたいのですが、途中で分からなくなってしまい困っています。 初めまして。私はマクロを初めてまだ、2ヶ月の初心者でございます。 質問内容に、不手際がありましたら、ご容赦ください。 勤務表マスタには勤務表があり、それ以外にsheet1 からsheet30まで、30枚のシートを用意しておき、日付別にsheet1に4月1日の勤務者とその出勤者の勤務を(早番はB3から下に表示し、遅番はB8下に表示するようにします。)抜き出し、同じようにしてsheet2には、4月2日の勤務者とその出勤者の勤務を、同じように、それぞれB3とB8に抜き出し…というように、30日分抜きだしたいのです。休みの人は表示しません(画像写真を参照願います。見にくい写真で恐縮でございます。) <勤務表マスタ> 名前 4月1日 4月2日 4月3日 4月4日… 坂本 遅番 早番 遅番 休み… 井端 早番 休み 早番 遅番… 長野 遅番 早番 早番 早番… 阿部 遅番 遅番 遅番 早番… 村田 休み 早番 遅番 遅番… 高橋 早番 遅番 休み 遅番… <sheet1=4月1日> (B3、C3から下に) 井端 早番 高橋 早番 (B8、C8から下に) 坂本 遅番 長野 遅番 まずは、勤務表から4月1日だけをとりあえず抜き出そうと、マクロを作って、勤務表マスタから、sheet1である、4月1日には、転記できたのですが、同じように、sheet2(4月2日)、 sheet3(4月3日)…と勤務表マスタから、各シートに転記するには、どうすれば良いのか?分からなくなってしまいました。 力技で、このマクロの「Sheet1」の部分を「Sheet2」にするようにしてといった感じで、あと30個書けば、できるような気もしますが、膨大な行数になりますし、何か他の方法をと考えたのですが、まだまだ、初心者で、どうすれば良いのか全く思いつきません。ここまで、インターネットで調べたりして、何とか作ったもので、全く幼稚なマクロかと思いますが、なにとぞ、ご鞭撻のほど、よろしくお願い致します。 Public Sub test() Dim strSerch1 As String Dim strSerch2 As String Dim LastRow As Long Dim i As Long, j As Long, k As Long '検索する文字を以下の二つの変数に代入 strSerch1 = "早番" strSerch2 = "遅番" 'Sheet1に「早番」の人をリスト化するための変数を設定 '最初に入れるのが3行目なのでjに3を代入 j = 3 With Worksheets("勤務表マスタ") '.Cells(.Rows.Count, 1).End(xlUp).Rowで最後の行がどこなのか調べて 'LastRow変数に代入する。 LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row For i = 2 To LastRow 'ここで2列目を検索して、「早番」の人がいたら、Sheet1の3行目から、リスト化する。 If .Cells(i, 2).Value = strSerch1 Then Worksheets("Sheet1").Cells(j, 2).Value = .Cells(i, 1).Value Worksheets("Sheet1").Cells(j, 3).Value = .Cells(i, 2).Value j = j + 1 End If Next i End With 'Sheet1に「遅番」の人をリスト化するための変数を設定 '最初に入れるのが8行目なのでkに8を代入 k = 8 With Worksheets("勤務表マスタ") LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row For i = 2 To LastRow 'ここで2列目を検索して、「遅番」の人がいたら、Sheet1の8行目から、リスト化する。 If .Cells(i, 2).Value = strSerch2 Then Worksheets("Sheet1").Cells(k, 2).Value = .Cells(i, 1).Value Worksheets("Sheet1").Cells(k, 3).Value = .Cells(i, 2).Value k = k + 1 End If Next i End With End Sub

  • ExcelのVBAの配列に関する質問です。

    ExcelのVBAの配列に関する質問です。 sheet1のデータをsheet2に表示するVBAを作成しています。。 sheet1のデータは7行目からスタートし、sheet2のデータは26行目からスタートしています。。 sheet1とsheet2の列は同じ並びではないため、それぞれのシートの列番号をCellsを用いて指定しています。 Sub test1() Dim endrow As Long endrow = Worksheets("sheet1").Range("A65536").End(xlUp).Row Dim i As Long Dim j As Long For i = 7 To endrow j = i + 19 Worksheets("sheet2").Cells(j, 1) = Worksheets("sheet1").Cells(i, 2) Worksheets("sheet2").Cells(j, 8) = Worksheets("sheet1").Cells(i, 28) Worksheets("sheet2").Cells(j, 9) = Worksheets("sheet1").Cells(i, 31) Worksheets("sheet2").Cells(j, 10) = Worksheets("sheet1").Cells(i, 32) ・ ・ ・ ※長いので省略 Next i End Sub 上記のtest1は正常に動くのですが、データ量が多いため、処理に時間がかかってしまいます。 高速化できないかと、以下のように変更しました。 Sub test2() Dim dataRange1 As Variant Dim dataRange2 As Variant dataRange1 = Worksheets("sheet1").Range("A1:GI10006") dataRange2 = Worksheets("sheet2").Range("A1:DZ10018") Dim endrow As Long endrow = Worksheets("sheet1").Range("A65536").End(xlUp).Row Dim i As Long Dim j As Long For i = 7 To endrow j = i + 19 dataRange2(j, 1) = dataRange1(i, 2) dataRange2(j, 8) = dataRange1(i, 28) dataRange2(j, 9) = dataRange1(i, 31) dataRange2(j, 10) = dataRange1(i, 32) ・ ・ ・ ※長いので省略 Next i End Sub test2は、エラーメッセージ等は表示されませんが、sheet2にデータが表示されません。 ちなみに、以下のようにsheet1のみ配列化した場合は、正常に表示されました。 Worksheets("sheet2").Cells(j, 1) = dataRange1(i, 2) Worksheets("sheet2").Cells(j, 8) = dataRange1(i, 28) Worksheets("sheet2").Cells(j, 9) = dataRange1(i, 31) Worksheets("sheet2").Cells(j, 10) = dataRange1(i, 32) test2は、どこが間違っているのでしょうか? ご教示ください。 よろしくお願いいたします。

  • 【Excel VBA】データ貼り付けの開始位置について

    Excel2003を使用しています。 先日、こちらでアドバイスをいただきながら、下記のようなマクロを作りました。内容はあるセルの値と同じ名前のシートへデータをコピーするというものです。 Sheet1に貼り付け元のデータが表形式であり、必要なデータのみ該当のシートへコピーします。マクロ実行後は、別の新しいデータをSheet1へコピペして、またマクロを実行するのですが、その際、データの貼り付け開始位置を前回マクロを実行して貼り付けられたデータから2行空けたいのですが、可能でしょうか? ________________________________________________________________________________________________________________________________ Sub test3() Dim n As Long Dim i As Long Dim j As Long  Worksheets("Sheet1").Activate   For n = 4 To Cells(Rows.Count, 2).End(xlUp).Row    If Cells(n, 3).Value <> "" Then     With Worksheets(CStr(Cells(n, 3).Value))       i = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 2).Copy .Cells(i, 2)       Cells(n, 7).Resize(, 2).Copy .Cells(i, 4)       Cells(n, 11).Copy .Cells(i, 3)     End With    End If    If Cells(n, 13).Value <> "" Then     With Worksheets(CStr(Cells(n, 13).Value))       j = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 12).Copy .Cells(j, 2)       Cells(n, 17).Copy .Cells(j, 4)       Cells(n, 18).Copy .Cells(j, 6)       Cells(n, 11).Copy .Cells(j, 3)     End With    End If   Next n End Sub

  • Excel VBA; 複数のループ処理

    ↓のようなコードがあります。 Dim i As Long, MaxRow1 As Long, MaxRow2 As Long MaxRow1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row MaxRow2 = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To MaxRow1 Worksheets("Sheet1").Cells(i, 1).Value = i . Next i For i = 1 To MaxRow2 Worksheets("Sheet2").Cells(i, 1).Value = i . Next i これらを最大行の多いシートに合わせて、パフォーマンスを良くしたいと思います。 同様の処理をシート1、シート2で実施しているので纏めて記述したいです。 シート1、シート2に対する処理をサブルーチンにする方法しかありませんか? どなたかお願いします。 If MaxRow1 >= MaxRow2 Then For i = 1 To MaxRow1 Else For i = 1 To MaxRow2 End If Worksheets("Sheet1").Cells(i, 1).Value = i Worksheets("Sheet2").Cells(i, 1).Value = i . Next i

  • エクセルVBAとmsg関数

    こんばんは。 エクセルVAB初心者です。 現在、エクセル2003で以下の画像のような 表を作成しました。 上段が請求書データ(シート1)で、 下段が請求書の印刷フォーム(シート2)です。 VBAで実行する処理は、請求書データNOをそれぞれ 任意でクリックし、選択しているNOの行データをシート2にそれぞれ 転記していき、一括で印刷するものです。 以下のように、コードを作りました。 Sub 発行() Dim i As Range Dim m As Integer Dim W1 As String With Selection W1 = Cells(.Row, 1).Value & " ~ " & _ Cells(.Rows.Count + .Cells(1, 1).Row - 1, 1).Value & vbCrLf & _ " の請求書を発行しますか?" m = MsgBox(W1, vbYesNoCancel) If m <> vbYes Then Exit Sub For Each i In .Resize(, 1) With Sheets("Sheet2") .Range("b1").Value = Cells(i.Row, 1).Value .Range("e1").Value = Cells(i.Row, 2).Value .Range("c5").Value = Cells(i.Row, 3).Value .Range("b3").Value = Cells(i.Row, 4).Value .Range("c6").Value = Cells(i.Row, 5).Value .PrintOut End With Next End With End Sub ここで質問なのですが、"の請求書を発行しますか?" の後に、選択している行の数を(合計O枚)のように 表示したいのですが、どのようなコードを入れればいいのでしょうか。 また、メッセージボックスのウインドウの中の文字が 小さいので、もう少し大きくしたいのです。 以上の2点ですが、お願いします。

  • エクセル:2列以上ランダムに入れ替えるには

    エクセルのA列に担当者名を入力していまして、別のシートには○と×を担当者分数に合う様に入力しています。 ○は担当者選出数だけあります。 別々のシートに、下記のマクロを組んでボタンを押したら、ランダムに入れ替わるものにしています。 これを一つのシートで、担当者名をA列、○と×をB列にして、同時にランダム入れ替わる様に色々とやってみましたが、A列のみだけが入れ替わります。 同時に入れ替わる事は不可能でしょうか? ご教授お願いします。 宜しくお願いします。 下記は、A列のみが入れ替わります。 Private Sub 更新_Click() ' Dim line_cnt As Long Dim i As Long Dim swap_area As Variant Dim swap_row As Long Randomize Sheets(1).Select line_cnt = Range("A65536").End(xlUp).Row For i = 1 To line_cnt swap_row = Int(Rnd * line_cnt + 1) If swap_row <> i Then swap_area = Cells(i, 1).Value Cells(i, 1).Value = Cells(swap_row, 1).Value Cells(swap_row, 1).Value = swap_area End If Next ' End Sub 下記の ,"B65536"を追加して、動作するかと思いましたが、B列は動作しませんでした。 line_cnt = Range("A65536","B65536").End(xlUp).Row

専門家に質問してみよう