nicotinism の回答履歴
- マクロでファイルを読み込み、重複行を削除したい。
35万件以上あるエクセルデータに対して、マクロを使って以下のような処理で重複業を削除したいと思っています。 Sub DeleteOldRow() Dim lastRow As Integer Dim i As Integer Dim j As Integer Dim strVal As String 'B列の最終行を求めます。 lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row '1行目から最終行の前まで繰り返します。 For i = 1 To lastRow - 1 'チェックする値を、strValに代入します。 strVal = ActiveSheet.Cells(i, 2).Value '今見てる行から、下をチェックします。 For j = i + 1 To lastRow 'もし、値が同じであれば、 If strVal = ActiveSheet.Cells(j, 2).Value Then '元の行を削除します ActiveSheet.Rows(i).Delete '最終行が1行減ったのでlastRowの値を減らします。 lastRow = lastRow - 1 'チェックしている行を1行前に戻します。 j = j - 1 End If Next j Next i End Sub 上記処理を35万件あるファイル上でマクロの実行すると、オーバーフローしてしまいました。マクロ側で対象ファイルを読み込むなどして、処理を軽くするやり方はありますでしょうか。上記処理にどのような処理を加えればスムーズに処理されるでしょうか。
- ベストアンサー
- Visual Basic
- webama_fk
- 回答数8
- access2010のユーザー機能について
以下についてご教授願います。 access2003にて拡張子.mdbのファイルを利用していました。 access2010に切り替えるため、拡張子.accdbにて同様のファイルを作成したいと思っています。 今までは、ユーザーレベル セキュリティ機能を利用して、管理者権限のみに表示されるフォームを作成し、管理者のみ入力できる項目などがありました。 2007以降はユーザーレベル セキュリティ機能が削除されたとのことで、同じように複数のアクセス権限などを利用するためにはどのように構築したらよいのでしょうか。 いくつかネットを検索しましたが、代替機能のようなものにヒットしませんでした。 share point serviceを利用して権限を付与する、といったものは見かけたのですが特にサーバなどに乗せて利用する予定はないため、他に設計などで代替出来る方法があればと思っています。 以上、よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- noname#242311
- 回答数1
- アクセス2010とエクセル2003の相性について
会社のPCが新しくなって困ったことが発生しました。 エクセルのビボットテーブルにアクセスのクエリを紐づけて、 売上データを毎月更新していました。 新たにエクセルから外部データを読み込む方法で作成しようとしたところ、 「`accdb.`のかっこの使い方が正しくあません。」いうエラーがでてしまいます。 対策をご存じの方がいたら、教えてください! よろしくお願いします。 XP→win7 Office2003→同じ Access1997→Access2010
- 締切済み
- Excel(エクセル)
- noname#190845
- 回答数1
- Access2007からADO接続にてEXCEL
Access2007からADO接続してEXCELのシートにSELECT文を発行すると、 『[Microsoft][ODBC Excel Driver]選択された CollatingSequence は OS でサポートされていません。』のエラーが出ます。 SELECT文に条件を付けると上記エラーが発生します、条件なしの場合はエラーが発生しません。 エラーが発生してもデバッグで F8 で実行すると正常に条件付きでSELECTされます、 エラーは一回目のSELECTだけで、以降はエラーが発生しません。 対処の方法をお教え下さい。 よろしくお願いします。 (("Microsoft.Jet.OLEDB.4.0"を使用してもエラーが発生しました。)) (例) 'テンポラリファイルを取り込む Dim querydef As DAO.querydef Dim adoCON As New ADODB.Connection Dim adoRS As New ADODB.Recordset Dim strV As String Dim strQ As String 'ADOを使い読み込み専用モードでExcelファイルを扱う準備(オープン)をします adoCON.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; " & _ "DBQ=" & "C:\test2014.xlsx" & ";" & _ "ReadOnly=True" 'SQLを実行(全件検索) OK Set adoRS = adoCON.Execute("SELECT * FROM [Shite1$]") 'SQLを実行(条件付き検索) NGエラーが発生します。 Set adoRS = adoCON.Execute("SELECT * FROM [Shite1$] WHERE A = 7 ")
- 締切済み
- その他(プログラミング・開発)
- mk8114
- 回答数1
- 2003アクセス → 2010移行のトラブル
アクセス2003で作成したものがアクセス2010では全く使用できなくなりました。 どのボタンを押しても下記メッセージがでます。 ●イベントプロパティに指定した式 クリック時 エラーが発生しました。 ・修正候補 ステートメントの最後 ・マクロ名、ユーザー定義関数名、(イベントプロシージャ)以外の式が指定されています。 ・関数、イベント、マクロの評価でエラーが発生しました。 ●ヘルプを表示すると このエラーはイベントのロジックの場所を評価できない為にイベントを実行できなかった為に発生します。例えば、フォームの OnOpen/開く時”” プロパティが=[フィールド]に設定されている場合、イベントが開始されたときに、マクロまたはイベントの名前が実行対象として予期されるため、このエラーが発生します。 コードを見ると赤くなっているのは下記だけだったのですが、他にも問題があるような気がします。。。。 Private Sub 見積書(少数点)ボタン_Click() End Sub Private Sub 報告書(少数点)ボタン_Click() End Sub ご教授宜しくお願い致します。
- 締切済み
- その他MS Office製品
- pipupu
- 回答数3
- Access クエリ IN演算子について
初めて質問します、よろしくお願いします。Access2007にて開発をしています。 リストボックスにて商品を選んだ際に隠しテキストボックスに´商品名1´,´商品名2´と入力し、クエリのwhere句に IIf(IsNull([Forms]![フォーム1]![抽出商品名]),True, [商品名] IN( [Forms]![フォーム1]![抽出商品名])) と記載してデータ抽出を試みているのですが、常に値が0件で返ってきません。 このやり方ではIN演算子は使えないのでしょうか? ご教唆のほど、よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- sho-birdie18
- 回答数2
- 項目内改行があるCSVの書式設定ができません
お世話になります。 現在、Excel2010のVBAを使って、ある項目内に改行CRLFを含むCSVを Excelシートにコピーして加工するマクロを作成しようとしています。 CSV1レコードの例) "001","b","c","d[CR][LF] e[CR][LF] f[CR][LF] g","h" 4項目名に改行が含まれますが、1レコードあたり5項目のCSVです。 CSVをExcelに取り込むには様々な方法があると思いますが、改行を含んでいても正しく取り込める方法として、 現在は下記のようにOpenText関数を使用して読み込みを行い、シートへ貼り付けています。 Workbooks.OpenText fileName:=取り込みたいファイルの名称, StartRow:=1, _ DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, _ FieldInfo:=Array(Array(1, xlTextFormat), Array(2, xlTextFormat), _ ・・・・・・・・・・・・・・ このとき、CSVの取込自体はできるのですが、FieldInfoで指定した書式指定 (ここでは文字列をあらわすxlTextFormat)が無視されてしまい、 Excelに取り込んだときには文字列でなく標準の書式になっています。 つまり上記の例では1項目目の"001"が桁落ちして1となってしまいます。 ネットで調べたところ、OpenText関数では拡張子csvのファイルを読み込む際には FieldInfo指定が無効となるとありました。そこでファイルの拡張子を.txtに変えてみたところ、 今度は項目内改行が認識されず、行区切りの改行とみなされてしまって、項目取り込みがずれてしまいます。 なんとか、桁落ちせず、なおかつ項目内改行も正しく認識できるような方法はないでしょうか。 OpenText関数以外の方法でもかまいませんので、有識者の方々にご教授いただければ、 と思っております。 よろしくお願いします。
- 締切済み
- Visual Basic
- hipokin
- 回答数2
- 項目内改行があるCSVの書式設定ができません
お世話になります。 現在、Excel2010のVBAを使って、ある項目内に改行CRLFを含むCSVを Excelシートにコピーして加工するマクロを作成しようとしています。 CSV1レコードの例) "001","b","c","d[CR][LF] e[CR][LF] f[CR][LF] g","h" 4項目名に改行が含まれますが、1レコードあたり5項目のCSVです。 CSVをExcelに取り込むには様々な方法があると思いますが、改行を含んでいても正しく取り込める方法として、 現在は下記のようにOpenText関数を使用して読み込みを行い、シートへ貼り付けています。 Workbooks.OpenText fileName:=取り込みたいファイルの名称, StartRow:=1, _ DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, _ FieldInfo:=Array(Array(1, xlTextFormat), Array(2, xlTextFormat), _ ・・・・・・・・・・・・・・ このとき、CSVの取込自体はできるのですが、FieldInfoで指定した書式指定 (ここでは文字列をあらわすxlTextFormat)が無視されてしまい、 Excelに取り込んだときには文字列でなく標準の書式になっています。 つまり上記の例では1項目目の"001"が桁落ちして1となってしまいます。 ネットで調べたところ、OpenText関数では拡張子csvのファイルを読み込む際には FieldInfo指定が無効となるとありました。そこでファイルの拡張子を.txtに変えてみたところ、 今度は項目内改行が認識されず、行区切りの改行とみなされてしまって、項目取り込みがずれてしまいます。 なんとか、桁落ちせず、なおかつ項目内改行も正しく認識できるような方法はないでしょうか。 OpenText関数以外の方法でもかまいませんので、有識者の方々にご教授いただければ、 と思っております。 よろしくお願いします。
- 締切済み
- Visual Basic
- hipokin
- 回答数2
- VBSを起動後にファイルをドラッグ&ドロップ
[環境] Windows 7 お世話になります。 完全にお遊び程度の内容になりますが、 VBSでドラッグ&ドロップしたファイルのファイル名を取得するプログラムを 作成しているのですが、 検索してもそれらしき方法が見つからずヤキモキしています。 まだ起動していないVBSファイルに対してのドラッグ&ドロップする方法であれば 結構HITするのですが、そうではなく私がやろうとしているのは、 既に起動しているVBSのアプリにドラッグ&ドロップをしたファイル名を 取得したいのです。(ちなみに取得したいのはフルパス) 取得したファイル名はInputBoxか何かに表示する程度でいいのですが、 案外むずかしかったりするのでしょうか? ご回答よろしくお願いします。
- ベストアンサー
- Visual Basic
- ctske
- 回答数1
- アクセス2000で2回目の検索ができなくなります
アクセス2000で、サンプルを見ながらVBAをみようみまねで書いている超初心者です(難しいことは理解できていません)。次のようなところで行き詰っています。ヘルプお願いします。 一つのフォームに、(1)コンボボックス2つで、2段階の絞り込みをするクエリ(全体から「種類」フィールドのAを抽出し、さらに「名前」フィールドからBに絞り込む) と、(2)オプショングループのフレームの中で五十音で検索するトグルボタン(「かな」フィールドからあ行、か行等を抽出) のふたつのフィルタを設置しています。 コンボボックスのほうには、絞り込みの解除のボタン(ここでは「再表示」とします)を設置しており、クリック時のイベントに Private Sub コマンド1_click() me.コンボ1=null me.コンボ2=null DoCmd.Requery End Sub と記述し、「再表示」ボタンを押すことで、何度もやり直しができています。 しかし、五十音検索を一度でも行うと、その後はコンボボックスの絞り込みが動かなくなってしまうのです。 そこで、こちらにも「全表示」ボタンをつくって、以下のような記述をしてみたのですが、いずれもコンボボックスによる絞り込みを復活させることができないでいます。どこが足りないのかわかりません。 1) Private Sub コマンド2_click() me.フレーム1=null me.フレーム2=null DoCmd.Requery End Sub これでトグルの選択は解除されますが、コンボボックスは動きません。よって3行目以降が間違っていると思い、 2)上記の3行目以降を DoCmd.ShowAllRecords や Me.FilterOn=false など、またそれらとReQueryなどを組み合わせてみたり、 3)コンボボックスの方に1)や2)のような記述を追加してみたりと、いろいろトライしていますが、どうしてもコンボボックスの動作が復活しないのです。 いったんフォームを閉じるとまたできるようになるのですが・・・どうすればよいか、ご教示をお願いいたします。 ps.VBAのお作法はほとんどわかっていません。なるべくわかりやすくお願いいたします。 ちなみに、MSのサイトで[ACC2000]フィルタが設定されたフォームで2回目以降のフィルタが実行されない というヘルプは参照したのですが、意味が分かりませんでした(泣) また、なぜこの時代にアクセス2000なのか、ですが、いまだに会社のバージョンがこれなのです(苦笑)
- ベストアンサー
- その他MS Office製品
- momijinohappy
- 回答数1
- アクセスのフォームの幅の最大値はいくつでしょうか?
パソコンの画面に依存しますか? 横長のパソコンだったら最大値が大きいとか・・? Access 開発者用リファレンス Form."Width/幅" プロパティ の項目を見ても最大値についての記載はありませんでした。
- ベストアンサー
- オフィス系ソフト
- PIIJDJMJDQX
- 回答数3
- Returnに対するGoSubがありません
さっきまで問題なく仕えていたアクセスファイルを起動したら 「イベント プロパティに指定した式 アクティブ時でエラーが発生しました:Returnに対するGoSubがありません」 と言うエラーが発生するようになりました。 VBA画面でデバッグをしてみても問題はありません。 何度か閉じて開いてを繰り返していたら、開けました。 でも次開いた時はまた同じエラーが発生しました。 特に何もいじってないのに、エラーになったり普通に開けたりするのはなぜでしょう?
- ベストアンサー
- オフィス系ソフト
- pvmojftyzj
- 回答数2
- UAC(ユーザアカウント制御画面)非表示の方法
質問内容 下記のSoft(全32Bits)のショートカットをクリックし起動すると UAC(ユーザアカウント制御画面)が表示される。 毎回、そうなるので非表示にする方法を教えて下さい。 ・AOMEI Partition Assistant Standard Edition 5.2 PT(パーテーション)を操作するSoft ・EaseUS MiniTool PT Wizard HE7.1 PT(パーテーション)を操作するSoft ・BDlot DVD ISO Master DVDをCopyするのにこれのみで全て可能なSoft ちなみに環境はWin8Pro X64Bitsです。 分かる方いらしゃいましたら、教えて下さい。 宜しくお願いします。 -------------------------------------- H25/12/7 投稿者:Dynaman1 -----------------------------------
- ベストアンサー
- その他(ソフトウェア)
- Dynaman1
- 回答数6
- クエリで出来た表にチェックボックスを追加する
access2000です。 クエリで抽出した表にチェックボックスを追加したいです。 この表はサブフォームで使っています。 で、このサブフォームにチェックボックスをつけて選択した、選択しないを入力できるようにしたいです。 どうすればいいのでしょうか? 式ビルドのように作れるのでしょうか? お願い致します。
- ベストアンサー
- その他MS Office製品
- yuukiyuuki
- 回答数2
- ワイルドカード 読み方
初歩的な質問かもしれないですが * ? # 全部のワイルドカードの読み方を知りたいのですが アスタリスク ハテナ シャープ であってますか? ハテナはクエスチョンマーク シャープはイゲタでしょうか?
- ベストアンサー
- Visual Basic
- lqsfnienvzrsg
- 回答数1
- 指定したテーブルのフィールドの数をカウント
指定したテーブルのフィールドの数をカウントするvbaコードはありますか? ADOXと言うのを使えばいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- cbwhnyanazn
- 回答数2
- Windows7について
Windows7のProfessionalの サポート期間なんですが 2020年まであるんですよね?? Windows8が主流になってるようですが わざわざ主流になってるからといって Windows8にする必要性はないでしょうか? 新しいのに興味はあっても 使い慣れてきているWindows7のほうが いいんですが Windows8に少しだけ興味があり使ってみたけど 使いにくいとか色々話があり 後悔したらやだなと思っています パソコンを買い換える予定なく 当分は、今のパソコンを使用していく予定です Corei7 3770 メモリ8G SSD128G HDD1TB グラボNVIDIA GeForce GTX 650 Windows7 Professional64bit
- ベストアンサー
- Windows 8
- ploki01010
- 回答数9
- ADOでループすると1レコードずつ飛ばしてしまう
アクセスなのですが Sub test() Set cn = CurrentProject.Connection rs.Open "テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "(店名 = '" & str店名 & "') And (URL = '未')" For j = 1 To rs.RecordCount rs("URL") = "http" rs.Update rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub このようにして、既存のレコードにフィルタをかけて該当のレコードの値を更新しているのですが rs.MoveNext をいれると、 1レコード目、3レコード目、5レコード目・・・と言う順番になってしまい、 最終的にrs.RecordCountの数を越したレコードを指定してしまい 実行時エラー 3021 「BOFとEOFのいずれかTRUEになっていか、または現のレコードが要求された操作には、現在のレコードが必要です。」 となってしまいます。 だからって rs.MoveNextをいれないと、rs.RecordCountに達するまで、 いつまでも同じレコードをループしてしまいます。 1レコードずつ順番にデータを掴む方法を教えてください。
- ベストアンサー
- Visual Basic
- GRIDKWBKMYD
- 回答数1
- PSV形式ファイルをAccessにインポートしたい
いつも楽しく勉強させていただいております。 Access2013を使っています。 やりたいことはこのAccessにPSV形式(","の代わりに"|"で区切られている)のファイルをインポートしたいのですが、うまくいきません。 [外部データ]-[テキストファイル]-[参照]で開くダイアログボックスで拡張子.psvのファイル名を指定すると下記のエラーとなります。 "次の拡張子がないテキストファイルはインポートできません。txt,csv,tab,asc,tmp,htm,html,log" つまり拡張子がいけないようです。 ファイルの拡張子を.csvに変更してインポートするとうまく取り込めるときと"インデックスが有効範囲にありません"のエラーになるときがあります。 うまくいったときにインポートの定義を保存しようとしましたが、できませんでした。 当面の逃げ道としては、"|"を","に変更し、拡張子を.csvにして保存したファイルを取り込んでいます。 それでもいいのですが、何かスマートな解決法はないものでしょうか。
- ベストアンサー
- その他(データベース)
- meglin888
- 回答数2
- AccessVBAでのExcelメモリ解放
はじめまして。 仕事でAccessVBAを使ってExcelのデータを操作するプログラムを作っています。 やりたいこと (1)日付と店番・店名が入力されているExcelを開く (2)削除日=C列からオートフィルで空白(日付が入力されていないもの)を絞りだす (3)日付=B列からオートフィルで本日の日付より1ヶ月前の日付を搾り出す (4)もし本日より1ヶ月前の日付があれば、C列の削除日に本日の日付を入れる (5)印刷 問題点 ・動作が不安定 ・Excelのメモリ解放がおかしいのか、プログラム終了後別件でエクセルを開くと ビジー状態になり「応答なし」になってしまう ・プログラム内でAccessテーブルのデータを既存のExcelファイルの最終行に 追加で出力したいが、なぜかAccessテーブルの名前で新規シートが作られ、そこに データが入ってしまう 色々なサイトを見ましたが、どこがおかしいのか分からず。 どなたか知恵をお貸しいただけますでしょうか。 Private Sub cmd_insert_Click() On Error GoTo Error Dim App As Object ' Application Object Dim Wkb As Object ' Excel.Workbook Object Dim Wsh As Object ' Excel.WorkSheet Object Dim Kensu As Integer ' 削除データ件数格納 Dim cnt As Integer ' 件数カウント Dim lngYLine As Long ' 対象となる列の番号 Dim intXLine As Integer ' 対象となる行の番号 Dim strac As String ' Accessテーブル名 Dim strxls As String ' 出力先ファイルのパス Dim strmsg As String ' メッセージボックスへのメッセージ格納 Dim strans As String ' 削除対象日付格納 'Excelファイルをセット Set App = CreateObject("Excel.Application") App.Visible = True Set Wkb = App.WorkBooks.Open("C:\Downloads\記録.xls") ←わざと変なURLにしています Set Wsh = Wkb.Worksheets("HP") '出力先ファイル指定 strxls = "C:\Downloads\記録.xls" 'Accessテーブルに入力したデータをExcelファイルへ出力 strac = "tbl_募集データ" strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _ "出力先は" & strxls & "、 シート名はHPです。" & _ Chr(13) & "よろしければ、OKをクリックして下さい。" '★★excelシートの最終行に追加でデータを入れたい★★ ' If MsgBox(strmsg, vbOKCancel) = vbOK Then ' ' ' '最初のデータをフィールド名として使う ' DoCmd.TransferSpreadsheet acExport, _ ' acSpreadsheetTypeExcel9, strac, strxls, True ' MsgBox "データ入力正常完了!" ' ' End If 'オートフィルで「削除日」の行が空白のものを選択 ※削除日はC行目固定とする Wsh.Range("C1").CurrentRegion.AutoFilter Field:=3, Criteria1:="=" '本日分の削除データのチェック(本日より1ヶ月前の日付のものを搾り出す) strans = Format(DateAdd("d", -30, Date), "mm/dd") Wsh.Range("B1").CurrentRegion.AutoFilter Field:=2, Criteria1:=strans If Wsh.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then MsgBox "本日は削除データがありません" Else '削除データ件数取得 Kensu = (Wsh.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count) - 1 MsgBox "削除データあり、件数は" & Kensu & "件でした" lngYLine = Wsh.Cells.Find(strans).Row intXLine = Wsh.Cells.Find(strans).Column For cnt = 1 To Kensu '削除日の列に本日の日付を入力 Wsh.Range("C" & CStr(lngYLine)).Value = Format(Date, "mm/dd") lngYLine = lngYLine + 1 Next '削除対象範囲を印刷 If MsgBox("印刷しますか?", vbQuestion + vbYesNo) = vbYes Then 'シートの指定 Wsh.Activate App.Visible = False Wkb.Application.ScreenUpdating = False Wsh.Visible = True Wsh.PrintOut Wsh.Visible = False End If End If 'オートフィルを元に戻す If Wsh.FilterMode = True Then Wsh.ShowAllData End If MsgBox ("正常終了しました!") '上書き保存 Wkb.Save 'Only XL 97 supports UserControl Property On Error Resume Next 'App.UserControl = True Wkb.Close SaveChanges:=False App.Quit Set Wsh = Nothing Set Wkb = Nothing Set App = Nothing Exit Sub Error: If Err.Number = 3044 Then MsgBox "パスの指定が誤っている可能性があります。", vbCritical Else MsgBox "予期せぬエラーが発生しました。", vbCritical End If App.UserControl = True Wkb.Close App.Quit Set Wsh = Nothing Set Wkb = Nothing Set App = Nothing End Su
- 締切済み
- その他(プログラミング・開発)
- catfood314
- 回答数1