テキストファイルには
A1234
B3456
A1234
CF456789
というデータがあります。
これを
B3456
A1234
CF456789
このようにして上書きしたいのですが
ほかでdictionaryを使うといいよ
と教えていただいたのですが
どのようにしてよいのかわからず
誰か教えていただけないでしょうか?
よろしくお願いします。

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

A 回答 (6件)

>重複データを削除するためにMSDN のDictionary を使うと簡単なようなのですが、


それは、あまり、スピードに関しては速くありません。Dictionary(ハッシュ)は、アルゴリズムが簡単だということだけです。今回は、テキストファイルで、元が1次元配列で取れるものを、わざわざ、ハッシュ形式で取る必要がありません。どうしても知りたければ、また書きます。

それから、上書きするプログラムは作れるのですが、マニュアル操作ならともかく、一瞬の間にしてしまうので、万が一を考えると、それはできませんでした。
以下のコードから、

   'Kill myFile '元のファイルを削除する
   'Call RenamePro '名前変更プログラム
の2つのコメント記号「'」(ダッシュ) を両方外せば、そのまま、コードが走ります。

ファイルは、複数選ぶことが出来ます。そのままですと、完成したものには、
_[filename].txt となります。(「_」(アンダーバー)が付く。必ず、テキストファイルであることに限ります。)なお、空白行は、出力されません。

元のファイルを移動するなりしてから、RenamePrc を実行してください。
万が一に備えて、必ずバックアップをしてから行ってください。

'-----------------------------------------------
'ユニークを出力するプログラム
'-----------------------------------------------

Option Explicit
Sub UniqTextPrc()
 Dim myData() As String
 Dim myStock() As String
 Dim Filenames As Variant
 Dim myFile As Variant
 Dim myOutFile As String
 Dim inFileNo As Integer
 Dim outFileNo As Integer
 Dim TextLine As String
 Dim i As Long, j As Long, k As Long, N As Long
 'テキストファイルが置いてある場所
 Const myPath As String = "C:\My Documents\" '設定してください。
 ChDir myPath
 
 '複数のファイルを選ぶことが出来ます。
 Filenames = Application.GetOpenFilename _
    ("テキスト(*.txt),*.txt", MultiSelect:=True)
 If VarType(Filenames) = vbBoolean Then Exit Sub
 
 On Error GoTo ErrHandler
 For Each myFile In Filenames
  'ファイルは、開いている間は、上書きすることが出来ません。
  myOutFile = Left(myFile, InStrRev(myFile, "\")) & "_" & _
         Mid(myFile, InStrRev(myFile, "\") + 1)
  inFileNo = FreeFile
  Open myFile For Input As #inFileNo
  outFileNo = FreeFile
  Open myOutFile For Output As #outFileNo
  '
  Do While Not EOF(1)
   Line Input #inFileNo, TextLine
   ReDim Preserve myData(i)
   myData(i) = TextLine
   i = i + 1
  Loop
  Close #inFileNo
  
  'ユニークを取り出す
  ReDim myStock(0)
  N = UBound(myData)
  myStock(0) = myData(0)
  k = 0
  '
  For i = 0 To N
   For j = 0 To k
    If myData(i) = myStock(j) Then
     Exit For
    ElseIf j = k Then
     k = k + 1
     ReDim Preserve myStock(0 To k)
      myStock(k) = myData(i)
     'ファイルの出力
      If myStock(k) <> "" Then '空白行を抜く
       Print #outFileNo, myStock(k)
      End If
    End If
   Next j
  Next i
  Close #outFileNo
  Erase myData(): Erase myStock()
  'Kill myFile '元のファイルを削除する
  '
 Next
ErrHandler:
If Err.Number > 0 Then
  MsgBox Err.Description, 16
Else
  'Call RenamePro '名前変更プログラム
  MsgBox "正常終了しました。", 64
End If
End Sub

'-----------------------------------------------
'名前変更プログラム
'-----------------------------------------------
Sub RenamePrc()
'オリジナルの元ファイルが、同じフォルダにあると、働きません。移動などしてください。
'名前変更プログラム
Dim myFile As String
 Const myPath As String = "C:\My Documents\" '設定してください。
 myFile = Dir(myPath & "_*.txt")
 On Error Resume Next
 Do While myFile <> ""
  Name myFile As Left(myFile, InStrRev(myFile, "\")) & _
   Mid(myFile, InStrRev(myFile, "\") + 2)
  myFile = Dir()
 Loop
End Sub
    • good
    • 0
この回答へのお礼

信じられないくらいうれしいです。
しかし、こんなにすごいコードになるとは...
驚くばかりです。贅沢を言わせていただければ、
上書きできると助かります。このテキストファイルは
バックアップをとってあることを条件に作成してあるので...
こんなにあっという間にできるVBAってすばらしいです。

お礼日時:2005/04/25 18:52

mimi923さん、こんばんは。



>上書きできると助かります。このテキストファイルは
>バックアップをとってあることを条件に作成してあるので

'Call RenamePro '名前変更プログラム

 Call RenamePro '名前変更プログラム

とすれば、元のファイルを削除して、次に、名前を変更していきます。

ファイルを読んで、ファイルに書き込むのは、同じファイルでは出来ません。
そこで、臨時のファイル名を作って、そこに書き込んで、後で名前を変えるという方法を取っています。

'--------------------------------
'ユニークを出力するプログラム
Sub UniqTextPrc()

 'Kill myFile '元のファイルを削除する
を、
  Kill myFile '元のファイルを削除する
にします。

'Call RenamePro '名前変更プログラム

 Call RenamePro '名前変更プログラム

End Sub
'--------------------------------
   ↓
'--------------------------------
'名前変更プログラム
Sub RenamePrc()
'--------------------------------

後で、まとめて名前を変更する場合は、
'Call RenamePro '名前変更プログラム
これは、そのままにしてください。その都度、元の名前に戻していくのなら、「'」を取ってください。

>こんなにあっという間にできるVBA
私は、4~5種類ものコードを試してみて、テキストファイルの場合、これが一番だという結論に至ったのです。実は、Dictionary は、スピードが遅いのであまり評判が良くありませんでした。今回は、他にも、WSHを使った方法や、Excelで、Dictionary を使う方法、一旦、Excelに読み込んでExcelの機能で処理する方法と、このコードの4つの中から選びました。
    • good
    • 0
この回答へのお礼

たいへん失礼しました。
そんなに何種類もの方法があるのですか...
ありがとうございました。

お礼日時:2005/04/25 22:46

ご質問者からレスが着かないので、本筋(Officeカテゴリ)とは違う回答を書いておきます。

もちろん、Windows Scripting Host でもできますし、VBA(VB)ですと、もっと多彩に実行できます。

それで、Cygwin などで使われている UNIX-Likeツールのsort.exe と uniq.exeを組みあせて行ってみました。以下は、拡張子が、.tarで、圧縮されていますので、それに応じた解凍ツールを用意してください。基本的な擬似Unixツール群ですから、興味のある人は、手に入れると良いと思います。

http://www.vector.co.jp/soft/win95/util/se010511 …
UNIX-like tools UNIX-like tools 4.12c

これは、あくまで、ユニークな文字列を取り出すということで解釈してください。つまり、一旦、並び替えをして、重複する行をはじく方法です。

以下に、バッチも用意しましたが、それほど必要でもないかもしれません。
拡張子(.txt)は、入れないで、実行してください。
出来上がりは、[BaseName].Txt が、[BaseName]N.Txt になります。
ファイル名は、[getuniq.bat] にします。手作業でも可能です。

これは、MS-DOS画面で、 getuniq myfile [Enter]
として実行します。

@echo off
if "%1" =="" goto errmsg
sort < %1.txt > tmp.txt
uniq < tmp.txt > %1"N.txt"
del tmp.txt
goto end
:errmsg
echo パラメータが違うか、またはありません。
:end

参考URL:http://www.vector.co.jp/soft/win95/util/se010511 …
    • good
    • 0
この回答へのお礼

ありがとうございます。お返事がおそくなりすいません。並べ替えはせずに重複データを削除したいのです。

お礼日時:2005/04/24 17:42

>ほかでdictionaryを使うといいよ


>と教えていただいたのですが

他では、最後まできちんと教えてくれなかったのですか?
ただ、それは、それぞれ意見です。Dictionary を使うのは、その人の好みだと思います。

それで、Office は使うのですか?それとも、使わないのですか?
Office を使わない場合は、Dictionary のほうが楽かもしれません。
Excelの機能を使うなら、Excelにインポートして、オプションフィルターで重複を出さない・オプションで、出力したものを、拡張子<prn> で、テキスト出力すれば、できあがります。

とりあえず、MSDN のDictionary を紹介しておきます。

http://www.microsoft.com/japan/msdn/library/defa …

参考URL:http://www.microsoft.com/japan/msdn/library/defa …

この回答への補足

OFFICEを使います。エクセルにインポートして関数を使用し...という方法でやっているのですが、
たくさんのテキストファイルがあるのでなんとか簡単にできる方法がないかと思いました。
MSDN のDictionary にこだわるわけではありません。
よろしくお願いします。

補足日時:2005/04/24 19:03
    • good
    • 0
この回答へのお礼

ありがとうございます。このURLを読んでも
意味がわからないのです。
重複データを削除するためにMSDN のDictionary を使うと簡単なようなのですが、

お礼日時:2005/04/24 17:23

重複している行を見つけて編集したい。

つまり、重複箇所を見つける方法を知りたいということでしょうか?
「dictionary」というソフトのことは知りませんが、恐らく目次を作成してくれるソフトなのでしょう。その目次を見れば複数有るかどうかわかりますから。

テキストエディタにはマクロを使えるものがあります。ようするにそのテキストエディタを動かすプログラムなんですが、秀丸エディタには「重複行を削除する簡易マクロ Ver.2.07」などというものが出てますのでこれを使うのがよいのでは?

参考URL:http://hide.maruo.co.jp/index.html,http://hide.m …
    • good
    • 0
この回答へのお礼

重複行を削除したいです。シェアウエアですね。
いろんなものがあるものです。
参考になりました。

お礼日時:2005/04/24 19:21

テキストファイルのファイルサイズが大きくないなら、単純にNotepadで最初の行を削除し、上書き保存することでできますが、、、

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

重複データは最初の行にあるわけではなく、どこかにあるかもしれないので、それを見つけて削除したいのです。

お礼日時:2005/04/24 17:25

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

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

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

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

Qテキスト形式だけど「between a and b」を使うには?

AccessのVBAで検索するためのコードを作成しています。
とあるフィールドは形式が「テキスト形式」なんですが、
その中で「AからBの間」という検索をしたいんです。

くんでみたコードはこんな感じです。
condData = "(T_テーブル.Data between #" & Me!A.Value & "# and #" & Me!B.Value & "#)"
WhereCond = WhereCond & "and" & condData
WhereCond = Mid(WhereCond, strCount + 1)
DoCmd.OpenForm "F_検索結果", acNormal, , WhereCond

ですが実行すると、

実行時エラー'3075':

クエリ式 'and(T_テーブル.Data between # A # and # B # )' の構文エラー:演算子がありません。

とでてしまいました。
どこがダメなのでしょうか?
よろしくお願いします。

Aベストアンサー

> とのことですが「抜き出す」とはどのようなことでしょうか?

> xxx.xxxx.xxx.xxx
> ~~~~~~~~ やり方としては、この部分を抜き出して、数値型で比較するか、

インデントができないので、ちょっとわかりにくくなったですね (^^ゞ

10文字目以降を取得するという意味です。

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

QAccessで、フォームAからダイアログモードで立ち上げたフォームBを開き、フォームBを閉じた時にフォームA側でマクロを実行したい

タイトルのままなのですが、

フォームA(メインとなる画面)と
フォームB(コードの検索画面)があり、
フォームAからフォームBをダイアログモードで開いている状態から、
フォームBを閉じたときに、フォームA側でマクロを実行したいと思っています。

具体的には、フォームAにコード入力用のテキストボックスがあり、コード検索のためにフォームBを立ち上げ、コードを選択した後フォームAのテキストボックスにそのコードを入れて、そのコードの値を元にフォームAにあるコンボボックスの再クエリを行いたいのです。

コンボボックスの再クエリの方法等は理解しているのですが、
上記のような場合に、どのイベントがキックされるのかが分かりません。
どのようにすれば(どのイベントを選んでマクロを指定すれば)適切に実行できるでしょうか。

Aベストアンサー

フォームBの処理
「値の代入」
「オブジェクトの選択」
  オブジェクトの種類:フォーム
  オブジェクト名:フォームA
「再クエリ」
  コントロール名:コンボボックス名
でいかがでしょうか?

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

Qブックマークインポート上書き

IEのブックマークをインポートしたいです。
そこで、ひとつ疑問なのが、
階層が一緒であればフォルダもきちんと把握して
上書きしてくれるのでしょうか?

たとえば、もともとあるブックマークが…
フォルダA
>サイト1
>サイト2

インポートするものが
フォルダA
>サイト2
>サイト3

あわせると…

>サイト1
>サイト2
>サイト3
になるか、ってことです。
ちゃんと上書きしてくれないと大変なことに。。。。

Aベストアンサー

ご希望通りに

A
>サイト1
>サイト2
>サイト3

になりますが、既存のお気に入りは上書きされずに元のものが残ります。(元々のサイト2とインポートするサイト2に同じ名前のお気に入りがある場合には、元々のものが残ります。)

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

Q【アクセス】「ほかのユーザー」を調べる方法

たまにvbaコードをいじろうとした時や
フォームのデザインを変えて保存しようとしたときに

「ほかのユーザーによってファイルが開かれているため、変更したデザインを保存したり、新しいデータベース オブジェクトに保存したりできません。 デザインの変更を保存したり、新しいオブジェクトに保存したりするには、ファイルを排他モードにする必要があります。」

のエラーが出るのですが
「ほかのユーザー」とは誰のことかも調べる方法はありますか?
よろしくお願いします。

Aベストアンサー

No.1です。

> なぜ3つも表示されてしまうのでしょうか?

・・・すみません、以前、同様の疑問を持ったのですが、
結局うやむやのままにしていました(汗)

改めて情報を探してみましたが、どうやらこのロック情報は、
ファイルに対してだけでなくレコードセットに対しての記録も
担っている、ということのようです:
http://support.microsoft.com/kb/208778/ja
(2項目『概要』のところに、「.ldb ファイルは、共有で使用
されているデータベースにおいて、どのレコードがだれに
よってロックされているかを判断するために使用されます 」
とあります)
※上記はAccess2000のものですが、Access2003のものは機械
 翻訳だったので・・・(概要はだいたい同じです。一応、
 『目次』のすぐ上にリンクがあるので、必要でしたら
 そちらもご覧下さい)

従って、一人でしか使用していなくても、複数のテーブルの
レコードを(クエリ等で大量に?:テストで数レコードのみの
テーブル2つで確認した限りでは再現せず)扱った場合は、
同じPC名とユーザー名が重複して記録されることになるのかと
思います。


なお、上記の機械翻訳の2003の方に、ログオン中のユーザーを
確認する方法(API関数は不要(汗))が説明されていましたので、
あわせてリンクを載せておきます:
http://support.microsoft.com/kb/285822/

No.1です。

> なぜ3つも表示されてしまうのでしょうか?

・・・すみません、以前、同様の疑問を持ったのですが、
結局うやむやのままにしていました(汗)

改めて情報を探してみましたが、どうやらこのロック情報は、
ファイルに対してだけでなくレコードセットに対しての記録も
担っている、ということのようです:
http://support.microsoft.com/kb/208778/ja
(2項目『概要』のところに、「.ldb ファイルは、共有で使用
されているデータベースにおいて、どのレコードがだれに
よってロックさ...続きを読む

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

Q「ほかのユーザー」とはどのファイルの事?

複数のアクセスファイル同士をテーブルリンクで繋いでいるのですが
ファイル1.accdbを開いて、デザインを修正して保存しようとすると
「ほかのユーザーによってファイルが開かれているため、変更したデザインを保存したり、 新しいデータベースオブジェクトに保存したりできません。 デザインの変更を保存したり、 新しいオブジェクトに保存したりするには、 ファイルを排他モードにする必要があります」
となり、保存できません。

この場合の「ほかのユーザー」とはどのファイルの事を指してるのかはどうやって調べればよいでしょうか?
ファイルは一人で使っていますが、
別ファイル(accdb)にリンクしています。

どのaccdbファイルを閉じれば保存できるのかを調べる方法を教えてください。

Aベストアンサー

ファイルが開かれていると、ファイル1.laccdbという南京錠マークのアイコンのファイルが同じフォルダ内に作られます。
使用しているファイル1を閉じた時に、このアイコンは無くなる筈ですが、これが残っていませんか?
ファイル1.laccdbは、正常にアクセスを終了しなかったような場合に、削除されず残ってしまうことがあります。
南京錠マークのアイコンが表示されている状態で、ファイル1.accdbを開いてしまうと、フォーム等変更した場合に、保存できなくなります。
だれが開いているかを調べる方法は、正式には知りませんが、ファイル1.accdbを開いて最適化を行ってみて下さい。この時のエラーメッセージに・・・によって開かれているので最適化できませんというような表示が出るので、だれが開いているのか分かります。


人気Q&Aランキング