Excel2007でアプリケーションを作っていますが、それを2010で実行すると結果が上手くいく時と上手くいかない場合があります。
もちろん実行条件は同じです。
プログラムの内容は、行の挿入、2行の結合、値の代入、並び替え等、普段シートで手作業で行っていることをマクロにしたものがほとんどです。
2007のアプリケーションを2010で実行した場合の不具合等はあるのでしょうか?
以下は詳細です。

1.2行が結合された行をコピー、挿入する。
2.ClearContentsで、値をクリアする。
3.挿入したセルに値を代入する。
4.並び替えする。

上記の処理をした場合、3のセルに値が入っておらず、結合を解除すると、2でクリアしたはずの
値が残っていたり、4の並び替えが条件通りにソートされていない等の不具合が起きます。

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

A 回答 (1件)

こんにちは



直接解決につながるかどうか判りませんが
2010の方でその操作をマクロで記録してみて
2007と比較してみてはいかがでしょうか
    • good
    • 0
この回答へのお礼

miyuyuさん:

ご回答どうもありがとうございました。

お礼日時:2011/07/24 13:38

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

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

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

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

Qエクセル(マクロ記録)

よろしくお願いします。
エクセルで、印刷マクロを作ろうと考えています。
             (基本、入門者です)
マクロ記録で、作っていますが、
記録終了するたびに「 印刷 」がかかっては、
用紙が何枚あっても足りません。

いい考えがありましたら、お教えください。
お願いします。

Aベストアンサー

#3の回答者です。

>出来たら、この i=1 の意味を教えていただけませんでしょうか?
単に、それはページ数です。

ヘルプを引用します。(PrintOut で調べました)

式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

From オプション 印刷を開始するページの番号を指定します。この引数を省略すると、最初のページから印刷します。
To オプション 印刷を終了するページの番号を指定します。この引数を省略すると、最後のページまで印刷します。

と出てきます。

QAccess2007でアプリケーションを作っていますが、お客様先で以下

Access2007でアプリケーションを作っていますが、お客様先で以下のエラーがでました。
「このオブジェクトは正しくない形式で保存されており、読み取ることができません。」
また、存在する20数個のテーブルのうち、半分程がアプリケーションからなくなっていました。
プログラム上でテーブルそのものを削除するロジックは入っていません。

全く原因が分からないのですが、上記のような現象ってどうして起こるのでしょうか?

Aベストアンサー

yuji_from_kyotoです。

超予想なのですが、
コンボには、テーブル/クエリで、常に対象テーブルの値を参照していると思われ、お客様の複数回処理で、
レコードロック等かかっているかも知れません。
テーブルが消去(破壊)された原因は毛頭想像つきませんが…(笑)

もしもカスタマイズするなら、DAOやADOでテーブルから値を取得し、
コンボボックスに値を格納するのはどうでしょうか?
そうすると常にテーブルの値を参照するのではありませんし、
amamaqさんの書かれた後の処理(実行ボタンでデータ更新処理)のみテーブルアクセスするので、
データベース負荷が軽減されます。

この手法はどうでしょうか?

> yuji_from_kyotoさん:
>
> ご回答どうもありがとうございます。
>
> 私のPC環境はWindows7で、お客様PCはVistaです。
> どちらもAccess2007です。
>
> 最初におかしくなったのは、あるフォームからレコードを入力(実行ボタンでテーブルに追加/更新する)していた際、同じ処理を数回行った時点で、急にフォームにあるコンボボックスが開けなくなったそうです。
> (このコンボボックスの、値集合タイプはテーブル/クエリで、ここで参照しているテーブルも
> なくなっていました)
> 各コンボボックスで参照しているテーブルは、特にプログラム内では使用していません。
> 急に10個以上のテーブルが消えてしまうのが全く不可解ですし、原因が分からないと、いつまた同じ現象が起きるか分からず、困り果てています。(><)

yuji_from_kyotoです。

超予想なのですが、
コンボには、テーブル/クエリで、常に対象テーブルの値を参照していると思われ、お客様の複数回処理で、
レコードロック等かかっているかも知れません。
テーブルが消去(破壊)された原因は毛頭想像つきませんが…(笑)

もしもカスタマイズするなら、DAOやADOでテーブルから値を取得し、
コンボボックスに値を格納するのはどうでしょうか?
そうすると常にテーブルの値を参照するのではありませんし、
amamaqさんの書かれた後の処理(実行ボタンでデータ更新処理)のみ...続きを読む

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

QEXCEL2007と2003のソートの記述の違い?

下記は配布する予定で作成したプログラムの一部(ソート部)です。EXCEL2007で作成して機能しているのですが残念ながらEXCEL2003ではエラーとなります。(方法2)そこでもうひとつ(方法1)に変えてみましたがどちらもEXCEL2003ではエラーになります。
内容は1行目の見出し部分を並び替えさせるというものです。(優先順に左から右)抜粋コードの前段階では各見出しの先頭にアルファベットと数字を付加し、その後その付加を基準にソート対象列を抜粋コードにより並び替え、その後は付加コードを切り取るという流れです。
残念なことにEXCEL2003が無いものですから、2007と2003のソートの記述の違いが解りません。何卒ご教示願えませんでしょうか?
ちなみに変数 見出し列数 は列のカウント数です。(ソート対象外の列)そして変数の指定の誤りというおちはありません。

方法1(2回めに2003用でもいけるかなと思って作成分)
SH2.Sort.SortFields.Clear
SH2.Sort.Orientation = xlLeftToRight
SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)).Sort _
key1:=SH2.Cells(1, 見出し列数 + 1), Order1:=xlAscending, _
Header:=xlNo

方法2 (最初に深く考えず作成したもの 思いきり2007仕様になってます)
With SH2.Sort '見出し優先順位により入れ替え
.SortFields.Clear
.SortFields.Add key:=SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

.SetRange SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight))
.Header = xlNo
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With

下記は配布する予定で作成したプログラムの一部(ソート部)です。EXCEL2007で作成して機能しているのですが残念ながらEXCEL2003ではエラーとなります。(方法2)そこでもうひとつ(方法1)に変えてみましたがどちらもEXCEL2003ではエラーになります。
内容は1行目の見出し部分を並び替えさせるというものです。(優先順に左から右)抜粋コードの前段階では各見出しの先頭にアルファベットと数字を付加し、その後その付加を基準にソート対象列を抜粋コードにより並び替え、その後は付加コードを切り取るという流...続きを読む

Aベストアンサー

エクセルのバージョン情報で分岐させたらどうでしょうか。


'----------------------------------------------

If Int(Application.Version)>11 then

'■■2007のSORT■■
With SH2.Sort
.SortFields.Clear
.SortFields.Add key:=SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

.SetRange SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight))
.Header = xlNo
.MatchCase = False
.Orientation = xlLeftToRight
.SortMethod = xlPinYin
.Apply
End With


Else

'■■2003のSORT■■ 

sh2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)).Sort _
  key1:=sh2.Cells(1, 見出し列数 + 1), Order1:=xlAscending, _
  Header:=xlNo, _
  Orientation:=xlLeftToRight

End If

'-------------------------------------------------------



●2003も2007も手元にないのでバージョンがわかりませんが
(2003は確か11.0)


=====================
'sh2.Sort.SortFields.Clear
'sh2.Sort.Orientation = xlLeftToRight

これらは2003では使えない。
2行目のOrientationはSortメソッドの引数にする。
以上。
 

エクセルのバージョン情報で分岐させたらどうでしょうか。


'----------------------------------------------

If Int(Application.Version)>11 then

'■■2007のSORT■■
With SH2.Sort
.SortFields.Clear
.SortFields.Add key:=SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

.SetRange SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight))
.Heade...続きを読む

Qエクセルについているマクロが出てこない・・・

 エクセルをひらき、ツール→マクロ→マクロでマクロの作成ができると聞きましたが、私のエクセル2002ではマクロのその機能が空欄状態です。復帰や回復できる方法を教えて下さい。

Aベストアンサー

(1)自分でマクロの記録を採る。
    ツールーマクロー新しいマクロの記録
(2)または他人がマクロの記録をとった。
   (3)他人がVBAコード(プログラム)を組んだ
    ツールーマクローVBEープログラム作成
場合に出てくる。(1)(2)(3)ともやっていないから、出てこないのは当然。
(1)なぞはマクロの画面でマクロー編集でコードが見れます。
ーーー
本でもWEBでも、マクロに関する本1冊か、「エクセル マクロ」でWEB照会して、勉強し。予備知識をえるべきです。

QExcelのような複数シートのあるアプリケーションを作りたい

Excelのような複数シートのあるアプリケーションを作りたい

Excelのような複数シートのあるアプリケーションを作りたいのですが、
これはどのようにすればよいのでしょうか?(.NET)

コントロールがあるなど、簡単にできるのでしょうか?
それとも工夫して自作していかなければならないのでしょうか?

「Excel シート vb」などを検索してもVBAの話のサイトばかり出てくるので
困っております。

参考サイトなどありましたら教えてください。

よろしくお願いします。

Aベストアンサー

回答が遅れてしまい、申し訳ありませんでした。

すいません。
複数のシート=アプリ、ドッキング
というイメージで回答していましたので、的外れになってましたね。
Excelシートはアプリ(Excelウィンドウ)の中のアプリ(A.xls)にタブ機能ではなく、ドッキングウィンドウを持たせているものでしたので、その辺の機能と同じなのかな?とrerere123さんの要望を勘違いしてました。

とりあえず、タブコントロールでは色々制限されると思ったので、SDock(Docking Window Control For .Net)というのを使ったほうがいいカナと思いました。
SDockは日本人制作ですので、日本語でやりやすいです。

また、タブコントロールにはない、ドッキングウィンドウにスクロールバーを備えているので、尚更ほしい機能ではないかなと思いました。
ただし、タブ左にボタンは付けられないですけど・・・・

ひとまず、あげられたタブの欠点?3つを2つはクリアしていますので、いかがかな?という感じです。

Qエクセル2010で作成したマクロ

エクセル2010で作成したマクロブックがあります。
このエクセルを知人にメールで送りました。

知人のエクセルは2007です。
マクロブックのフォームボタンを押しても何も動作しない状況との事です。

エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

素人の質問で申し訳ありませんが、ご指導お願いいたします。

Aベストアンサー

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイルの形式をマクロ有効ブックにして保存したのを送ったか再確認する
といったところをよく確認してください


先方に対してあなたが確認すべきポイントとしては、
○「何も起こらない」とは、具体的にどんな状況なのか再確認する
 ・ホントにうんともすんとも反応が無いということなのか
 ・実は何かエラーメッセージっぽいダイアログが現れて、OKをクリックしてもマクロが動作した様子が無いとかの状況では無かったか



具体的な状況が明らかになったら、ようやく対処を検討する事ができるようになります。
●そもそもどういうマクロを作成したのか、ご自分の作成したマクロをよく確認して、「反応が現れない」マクロを書いてたんじゃないのか再確認する
 たとえば無意味にon error resume nextのような仕込みをしてたりしないか
 たとえば不適切なデータに対して何も作動せずに終わってしまうようなそもそも作りにしてたんじゃないか
 とか。

●実は何かダイアログが出てたのなら、具体的にどんなダイアログなのか正確に聞き取って、あなたの方で対処を考える
 「マクロが無効になってる」のなら、マクロを有効にして実行するように伝える
 とか。

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイル...続きを読む

QEXCEL2007で動くマクロがEXCEL2000だとエラーが出ます。

下記は、wordの「@一覧表」文字の部分をExcelで作成した表(B3:E9)に置き換えるEXCEL2007で作成したマクロですが、EXCEL2000で動かすと「メソッドまたはデータメンバーが見つかりません」のエラーが出ます。初心者につき、対処方法を教えて下さい。

Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Dim wordRange As Word.Range

Set wordApp = New Word.Application
Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\ひな型用ドキュメント.docx")
(途中略)
Set wordRange = wordDoc.Content
wordRange.Find.Execute "@一覧表", Forward:=True
Range("B3:E9").Copy
wordRange.PasteAndFormat (Word.wdPasteDefault) ←エラー

*エラーは、wdPasteDefaultで出ます。

下記は、wordの「@一覧表」文字の部分をExcelで作成した表(B3:E9)に置き換えるEXCEL2007で作成したマクロですが、EXCEL2000で動かすと「メソッドまたはデータメンバーが見つかりません」のエラーが出ます。初心者につき、対処方法を教えて下さい。

Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Dim wordRange As Word.Range

Set wordApp = New Word.Application
Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\ひな型用ドキュメント.docx")
(...続きを読む

Aベストアンサー

エラーは同じ箇所で出るのですか?
Pasteメソッドには引数はないと思いましたたが。Pasteのどこかにカーソルを置いてF1キーを押せばヘルプが見えます。確認してみてください。
もし他の場所にでるなら同様に確認しながら修正する訳ですが、2000と2007の両方で使うなら逆に2007で動くかも確認する必要があります。
判らなくなったらまた質問してください。

Qエクセルで作成したマクロが他のシートに反映しない

必要に迫られ始めてマクロをエクセル上で作成してみました。(初心者)
そのマクロを違うエクセルファイル上でも反映させたいのですが
マクロを作ったおおもと(最初)のファイルを閉じてしまうと違うエクセルファイルを開いてもマクロが反映されていません。
マクロでの命令内容としては 
エクセル上の数字の羅列→グラフ作成→上書き保存 という手順で作りました。
他のエクセルファイルも同じように数字の羅列があります。それを同じ作業(グラフ作成→上書き保存)したいのです。
一度作ったマクロを他のエクセルファイルにも反映させるにはどうしたら良いのでしょうか?
説明がわかりにくくてすみません。
よろしくお願いします。

Aベストアンサー

マクロの記録先を「個人用マクロブック」にするのが良いと思います。
一回マクロの記録を行い「保存先」を「個人用マクロブック」にします。するとPERSONAL.XLSという特別なブックが作成されます。

このブックの標準モジュールシートに先に作ったマクロを貼り付けてください。

そうすればエクセルを開くと、どのブックでもマクロが実行可能になります

Qexcel 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だと
”オブフェクトが必要です”
のエラーが返ってきます。
かといって、どの構文でエラーが出ているのか教えてくれない(反転しない)んです。

 どこにエラーがあるのでしょうか?
 よろしくお願いします。

職場のPC
・windowsXP
・excel2003

自宅PC
・windows7
・excel2007

 職場には自分専用端末がないので、自宅でコードを書いてUSBメモリにコピーし、
職場でペーストするという環境で起きた問題です。

 やりたいことは、顧客から送られてくるデータを sheet1 に保存し、
sheet2 に置いてあるマスターデータを参照して不必要な行を削除するマクロです。

 以下、コード
_______________________

Sub 別シート参照デリート()

Dim st1, st2 As Worksheet
Set st1 = This...続きを読む

Aベストアンサー

なーんか変ですね。
バージョンが微妙に異なりますが
当方(WinXP & Excel2002 とWin7 & Excel2010)ではエラーになりませんでした。
変数宣言の4行は修正するとしても解決には至らないような気がします。

社PCで互換パックを使用して、xlsm 形式を開いているとか。
http://support.microsoft.com/kb/923505/ja

自PC・社PCで、デバッグ→コンパイルが通るかどうか。

ツール → 参照設定 で参照不可になっているものがないか。

を調べてみては?

以上でも解決しないとなると、
社PCで新規XLSファイルにシートをコピペ、コードもコピペで
何とかなるかも?


人気Q&Aランキング