Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


47 / 3841 ページ ←次へ | 前へ→

【81546】計算の誤差
質問  大福  - 20/11/24(火) 12:26 -

引用なし
パスワード
   excelで6/9*33=22.000になります。電卓計算は21.9999です。
どうして誤差が出るのでしょうか?教えてください。
・ツリー全体表示

【81544】Re:特定のフィールドの左3文字を非表示に
質問  YS  - 20/11/22(日) 21:18 -

引用なし
パスワード
   ▼γ さん:
>表示形式だけでの対応は無理でしょう。
>値そのものをMID関数で修正したほうが手っ取り早いでしょう。
>消さないものは必要に応じて別途改めて取得する前提です。

ご回答ありがとうございます。
これは、クエリデザインで式を書くということでしょうか?
OLE経由の過程でトリミングすることは出来ないのでしょうか?
・ツリー全体表示

【81543】Re:特定のフィールドの左3文字を非表示に
回答  γ  - 20/11/15(日) 17:18 -

引用なし
パスワード
   表示形式だけでの対応は無理でしょう。
値そのものをMID関数で修正したほうが手っ取り早いでしょう。
消さないものは必要に応じて別途改めて取得する前提です。
・ツリー全体表示

【81542】Re:特定のフィールドの左3文字を非表示に
質問  YS  - 20/11/15(日) 13:20 -

引用なし
パスワード
   環境は、win7 office2003です。よろしくお願いいたします。
・ツリー全体表示

【81541】特定のフィールドの左3文字を非表示に
発言  YS  - 20/11/15(日) 13:17 -

引用なし
パスワード
   以下のコードでmdbからクエリをexcelに入れて印刷しようとしています。

Dim mycon As ADODB.Connection

Dim fin As String
Dim ador As Excel.Range
Dim adorr As ADODB.Recordset

Set mycon = New ADODB.Connection

fin = "**.mdb"
With New Excel.Application
  Set ador = .Workbooks.Open("**.xls").ActiveSheet.Range("a2")
 
 
  .Visible = True
End With
With ador.Worksheet.PageSetup


  .LeftMargin = 0
  .RightMargin = 0
 .TopMargin = 0
  .BottomMargin = 0
  .CenterHorizontally = True
.CenterVertically = True
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintGridlines = True


  End With
ador.Worksheet.PrintPreview


With mycon
.Provider = "microsoft.jet.oledb.4.0"
.ConnectionString = "data source=" & fin
.Open
Set adorr = .Execute("** クエリ")
ador.CopyFromRecordset adorr
 With ador.CurrentRegion.Borders

 .LineStyle = xlDouble
End With

adorr.Close
mycon.Close


End With

mdbには商品コードフィールドがありそのフィールドには同じ数字が3桁ありその3文字を非表示にしたいです。商品コード12345678なら45678のように左3文字をフィールド全て非表示にするやり方をご教授お願いいたします。また、印刷に関してもご指摘ありましたら、重ねてお願いいたします。
・ツリー全体表示

【81540】VBAでWebのスクレイピング
質問  YAMADA  - 20/11/13(金) 15:18 -

引用なし
パスワード
   VBAでWebのスクレイピングを行っています。
まず Windows 8.1 Excel32ビット環境でプログラム作成し正常に動作することを確認しました
続いて、別のPC Windows 10.0 Excel32ビットで動作させたところ

実行時エラー 2125463506(815002e)
このエラーコードに関連付けられたテキストが見つかりませんでした

のエラーが発生し
場所は
Set objIE = CreateObject("InternetExplorer.Application")
であることがわかりました。

何が原因か教えてください
・ツリー全体表示

【81539】Re:VBAである範囲に入力した文字種の自動...
お礼  やぶ  - 20/10/25(日) 22:10 -

引用なし
パスワード
   hatena さん

早い返答、大変助かりました!
おかげでうまく業務のファイルを作成することができました。

教わった内容は自分のものにできるよう、しっかりと勉強していきます。
本当にありがとうございました!
・ツリー全体表示

【81538】Re:VBAである範囲に入力した文字種の自動...
回答  hatena  - 20/10/25(日) 21:12 -

引用なし
パスワード
   Worksheetのモジュールに下記のように記述してください。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range
  Set rng = Intersect(Range("A1:A100"), Target)
  If rng Is Nothing Then Exit Sub
  
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  Dim cel As Range, str As String
  For Each cel In Target
    cel.Value = StrConv(cel.Value, vbNarrow + vbUpperCase)
  Next
  Application.ScreenUpdating = True
  Application.EnableEvents = True
End Sub
・ツリー全体表示

【81537】VBAである範囲に入力した文字種の自動変更
質問  やぶ  - 20/10/25(日) 13:20 -

引用なし
パスワード
   VBAも質問も初心者です。

VBAで例えばA1からA100までのセルに文字が入力されたとき、その入力した文字を自動で大文字で半角に変更されるようにしたいのですが、なかなかうまくつくれません。
Worksheet_ChangeやStrConvを使用することまではわかるのですが、シート全体になったり、色々エラーになったりと原因を特定し修正しようとしても更なるエラーを招いて挫折しました。

説明下手で申し訳ありませんが、どなたかご教授お願いいたします。
・ツリー全体表示

【81536】Re:特定のシートをスキップしたい
発言  マナ  - 20/10/15(木) 20:35 -

引用なし
パスワード
   ▼プラプラ さん:

>回答いただいたことは試してみました。

どんな風に組み込んだのですか。
そのまま、ここにコピペしてください。
・ツリー全体表示

【81535】Re:特定のシートをスキップしたい
質問  プラプラ  - 20/10/15(木) 10:50 -

引用なし
パスワード
   ▼プラプラ さん:
>別ファイルのシート名を取得して一覧表示しようとしています。
>その中の特定のシート名は一覧に表示したくありません。
>
>If ws.Sheets(i).Name = "AAA"
>
>とすると,
>  実行時エラー'13'
>  型一致しません
>というエラーとなります。
>
>dim ws2 as worksheet
>
>set ws2.Name = "AAA"
>If ws.Sheets(i).Name = ws2.Name
>
>のような形でするしかないのでしょうか?


ありがとうございます。

Aというブックにマクロを置いています。
Bというブックのシート名を取得し,Aのブックのセル個々に1シート名を表示しています。Bのブックにはセルに表示したくないシートがありスキップしたいです。

   sheet1    sheet1
   sheet2 →  sheet3  
   sheet3

sheet2 はセルに表示したくないということで,
 if bb.Sheet(i).Name = "sheet2" then
  (bbはブックBを設定してます。)

のように記述すると,エラーになり,セルに格納後,セルで聞いてもエラーとなります。ですが,回答いただいたことは試してみました。
他に考えられることがないでしょうか?
・ツリー全体表示

【81534】Re:配列で高速化したい
お礼  うなぎ E-MAIL  - 20/10/14(水) 13:21 -

引用なし
パスワード
   マナさん
ありがとうございます。

すみません
この記述は少しでも早くしようと後から別のコードから上下間違えてコピペしてしまったみたいです。なので、これがあってもなくてもおなじだけ時間がかかっています。
今、セルを選択する度にこの動作が入ること自体を見直す方向に転換しました。
2次元配列の方法、今後も勉強していきます。
ありがとうございました。
・ツリー全体表示

【81533】Re:配列で高速化したい
発言  γ  - 20/10/13(火) 22:33 -

引用なし
パスワード
   最初の3行の右辺を見直しては?
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
これは元に戻すときの処理ですよね。
・ツリー全体表示

【81532】Re:配列で高速化したい
発言  マナ  - 20/10/13(火) 19:42 -

引用なし
パスワード
   ▼うなぎ さん:

時間がかかっているのは、再計算ではありませんか。
xlCalculationAutomaticを一時的に手動にしてはどうでしょうか。

 
・ツリー全体表示

【81531】Re:配列で高速化したい
お礼  うなぎ E-MAIL  - 20/10/13(火) 11:57 -

引用なし
パスワード
   マナさん
お返事ありがとうございます。
納入先と製品名の組合せが全部で550個あります。

時間を計測してみましたところ、
納入先リストを検索してそれと同じ行の製品名をAM列にコピーするという一連の動作1回に3〜4秒かかっており、同じ納入先の製品が55個あると全部で3分以上かかりました。改めて測ってみると酷いですね。
・ツリー全体表示

【81530】Re:特定のシートをスキップしたい
発言  マナ  - 20/10/12(月) 20:48 -

引用なし
パスワード
   ▼プラプラ さん:

>If ws.Sheets(i).Name = "AAA"

If ws.Name = "AAA" then

If Sheets(i).Name = "AAA" then

ではないでしょうか。

また

>set ws2.Name = "AAA"

これも set はだめ。

 ws2.Name = "AAA"
・ツリー全体表示

【81529】Re:配列で高速化したい
発言  マナ  - 20/10/12(月) 20:41 -

引用なし
パスワード
   ▼うなぎ さん:

>恐らくAM列に抽出する部分を配列方式にすると高速化できると思い、

配列をどのように使えばよいか思いつきませんでした。
代案で、フィルタオプションを使うのはどうでしょうか。
もともと、そんなに遅いと思えないので
速度面で効果はないかもしれませんが
コードは簡潔でわかりやすくなると思います。
・ツリー全体表示

【81528】Re:配列で高速化したい
発言  マナ  - 20/10/12(月) 19:58 -

引用なし
パスワード
   ▼うなぎ さん:

>このコードでも動いているのですが、ヒットする数が多いと非常に遅くなります。

どの程度の数で、どのくらい遅いのでしょうか。
・ツリー全体表示

【81527】Re:特定のシートをスキップしたい
発言  OK  - 20/10/12(月) 17:13 -

引用なし
パスワード
   >一覧表示

どこに一覧表示するのでしょう?
※「配列」で一度検索してみてください。
・ツリー全体表示

【81526】Re:パスをセルにセットできない]
発言  OK  - 20/10/12(月) 15:08 -

引用なし
パスワード
   ダイアログがキャンセルされたときの処理も入れておきましょう。

ht tp://officetanaka.net/excel/vba/file/file02.htm
・ツリー全体表示

47 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free