Excel VBA質問箱 IV

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

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


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

【79424】Re:ユーザー定義関数の中でセルの値を参...
回答  まっつわん  - 17/10/18(水) 14:05 -

引用なし
パスワード
   すでに適切な回答がありますが、別案です。

セルに名前を付けておられるようですが、
数式にも名前を付けられます。
そちらを使ってみてはいかがでしょうか?

www.eurus.dti.ne.jp/~yoneyama/Excel/name.htm#siki_name
・ツリー全体表示

【79423】Re:Findステートメントからsumで合計金額...
回答  まっつわん  - 17/10/18(水) 13:55 -

引用なし
パスワード
   この例題でEndプロパティでセル範囲を特定するのは難しいのではないでしょうか?
ついでに検索を繰り返すのも煩雑でしょう。

今回の場合はジャンプ機能でセル範囲を検索する方法が良いと思います。

Sub test()
  Dim Rng As Range
  Dim a As Range
  
  On Error Resume Next
  With ActiveSheet.UsedRange
    Set Rng = .Columns(3).SpecialCells(xlCellTypeConstants)
  End With
  On Error GoTo 0
  If Rng Is Nothing Then Exit Sub
  
  For Each a In Rng.Areas
    With a
      .Cells(1).Offset(.Rows.Count).Value = WorksheetFunction.Sum(.Cells)
    End With
  Next
End Sub

また、標準機能で小計行は挿入できますが、
そちらを使わないのはなぜでしょうか?
・ツリー全体表示

【79422】Re:Findステートメントからsumで合計金額...
発言  マナ  - 17/10/17(火) 22:58 -

引用なし
パスワード
   ▼ノンボ さん:

>   with rng.cells(3,3)

このセルの一つ下が空白かどうかで場合分けしてはどうでしょうか。
・ツリー全体表示

【79421】Findステートメントからsumで合計金額を...
質問  ノンボ E-MAIL  - 17/10/17(火) 20:36 -

引用なし
パスワード
    はじめまして、VBA初心者です。
 worksheetに複数の店舗データーがあり、店舗(A列)ごとに品目(B列)と金額(C列)があります。店舗ごとに金額の合計をだすため下記コードをかきました。
 sub Test()
  dim rng as range
  set rng=cells.find(what:="A店",lookin:=xlValues, lookat:=xlWhole)
  if not rng is nothing then
   with rng.cells(3,3)
   .End(xlDown).offset(1,0)= _
   "=sum(" & range(.address, .End(xlDown)).address(False,False) & ")"
  End With
  End if
End sub
複数行データーがある場合は問題なく合計金額がでますが、データーが1行だけの場合、
エラーになります。xlUPなどいろいろためしてみましたが、うまくいきません。どのようにコードをなおしたらいいか、ご教授ください。よろしくお願いします。
・ツリー全体表示

【79420】Re:ユーザー定義関数の中でセルの値を参...
発言  γ  - 17/10/14(土) 7:51 -

引用なし
パスワード
   すでに適切な回答をいただいています。

以下、参考のためのメモです。
(1)
ht tps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q108658705

(2)
ht tps://msdn.microsoft.com/ja-jp/library/office/ff700515(v=office.14).aspx
> 揮発性関数
> 揮発性関数は、参照元が変更されていないように思われる場合でも、再計算のたびに必ず再計算されます。揮発性関数を多用すると、再計算のたびに計算速度が低下しますが、全計算には影響しません。Application.Volatile を関数のコード内で指定すると、ユーザー定義関数を揮発性関数にできます。
>
> Excel の組み込み関数の中でも、RAND()、NOW()、および TODAY() は、言うまでもなく、揮発性関数です。また、OFFSET()、CELL()、INDIRECT()、および INFO() も揮発性関数です。
>
> 以前は揮発性関数として記載されていたが、実は、揮発性関数でないものに、INDEX()、ROWS()、COLUMNS()、および AREAS() があります。
((注)↑は、Excel2010を前提とした記述です)

質問にある、手法2を使いたい理由は何ですか?
記述のための労力節約ですか? コピーペイストすればさほどではないのでは?
式の明瞭性を確保する観点からも本来の1の使い方を私は推奨します。

Application.Volatileは、ユーザー定義関数を揮発性関数にする仕組みですが、
どの程度のセルでこの関数を使うかによりますね。
もしTODAY,NOW,INDIRECT,OFFSETを多用する方であれば、すでに揮発性関数を経験済み。
気にならないのであれば、それを使うのもアリかもしれません。
・ツリー全体表示

【79419】Re:ユーザー定義関数の中でセルの値を参...
発言  マナ  - 17/10/13(金) 20:25 -

引用なし
パスワード
   ▼りった さん:

>何かうまい回避策有りますでしょうか?

application.volatile を使うとできますが、
無関係のセルが変更されても再計算されてしまいますので
うまいとは言えないです。
・ツリー全体表示

【79418】ユーザー定義関数の中でセルの値を参照す...
質問  りった  - 17/10/13(金) 12:18 -

引用なし
パスワード
   ユーザー定義関数の中でセルの値を参照すると(引数にしないと)、セルの値が変わっても再計算されないようです。
多数のセルを参照して値が決まる情報が有り、その情報を各所で使うため引数なしで使いたいのですが、再計算されないのでは困ります。
何かうまい回避策有りますでしょうか?

イメージ:
下記、1.ではなく2.の形で書きたいが、2.にすると販売員役職CD等が変わっても再計算されない。
1.最高値引き率(販売員役職CD,定価,商品カテゴリー,顧客ID)*定価*数量
2.最高値引き率()*定価*数量

(販売員役職CD,定価,・・・は、名前定義したセル)
・ツリー全体表示

【79417】回答がつかないのでaccessの掲示板に移動...
お礼  りった  - 17/10/12(木) 9:55 -

引用なし
パスワード
   回答がつかないのでaccessの掲示板に移動します。
・ツリー全体表示

【79416】Re:最終行が変動する際のコピー方法につ...
発言  りった  - 17/10/11(水) 12:56 -

引用なし
パスワード
   いまいちやりたいことがわからないのですが、こういうことですか?

式の例(B1):="03-1234-" & A1

(マクロ実行前)
 A  B
1 2363 03-1234-2363
2 3432 03-1234-3432
3 5323
4 8325
5 2593

(マクロ実行後)
 A  B
1 2363 03-1234-2363
2 3432 03-1234-3432
3 5323 03-1234-5323
4 8325 03-1234-8325
5 2593 03-1234-2593
・ツリー全体表示

【79415】access連携 列名追加を簡単にするには?
質問  りった  - 17/10/11(水) 12:40 -

引用なし
パスワード
   縦にも横にもでっかいEXCELの表(以下、DB.xls)をAccess化しようとしています。
1件ずつの処理をするためのファイル(以下、FORM.xls)のB列のvalueは、
tableの列名と一致しています。
尚、上記、tableの列名を入力した範囲(FORM.xlsのB列)に、名前定義がされています。
指定したIDの情報を読む処理を考えているのですが、動的(※)に記述することは可能でしょうか?

※ 下記だけで、新規属性(DBの列)追加が出来る状態。
  FORM.xlsに行を挿入してB列にtableの列名を追加、DBのtableに列を追加

尚、守秘義務の都合で、実際のマクロよりかなり簡略化しています。

Sub sample()
  Dim DBpath As String
  Dim adoCn As ADODB.Connection ' ADOコネクションオブジェクト
  Dim adoRs As ADODB.Recordset ' ADOレコードセットオブジェクト
  Dim strSQL As String
  Dim ws As Worksheet
  
  Set ws = Sheet1
  ws.Cells.ClearContents
  
  DBpath = "C:\sample.accdb"
  Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成
  Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成
  adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";"
  strSQL = "SELECT * FROM TSUKANIRAI WHERE ID = " & ws.Range("ID")
  adoRs.Open strSQL, adoCn
  
  ws.Range("C3").Value = adoRs!NO  ' ← この「NO」等が文字列であれば、やりようがあるのですが...
  ws.Range("C4").Value = adoRs!HANBAIBI
  ws.Range("C5").Value = adoRs!CUSTOMER_NAME
  ws.Range("C6").Value = adoRs!CUSTOMER_ADD
  
  adoRs.Close
  adoCn.Close
  
  Set adoRs = Nothing
  Set adoCn = Nothing
  
End Sub
・ツリー全体表示

【79414】Re:ワイルドカードの使い方
発言  マナ  - 17/10/7(土) 13:50 -

引用なし
パスワード
   あぁ、コードはいただきものでしたか。
・ツリー全体表示

【79413】Re:ワイルドカードの使い方
お礼  インザーギ  - 17/10/7(土) 11:58 -

引用なし
パスワード
   説明不足が多々あり申し訳ありません。
問題解決でき、参考になりました。
・ツリー全体表示

【79412】Re:ワイルドカードの使い方
発言  γ  - 17/10/7(土) 11:39 -

引用なし
パスワード
   >ワイルドカードを使用して、取得できるように試みましたが上手く取得できません。

・ワイルドカードをどのように使用したのですか?
・上手くできないとは、どのようなことですか?
 エラーが発生しているのですか?
 それとも想定と異なる結果なんですか?
 どんな結果を想定して、どんな結果になってしまっているのですか?
説明をしてください。
・ツリー全体表示

【79411】Re:ワイルドカードの使い方
発言  マナ  - 17/10/7(土) 11:19 -

引用なし
パスワード
   ▼インザーギ さん:

"264.*.jpg"

で、あってると思いますが?


B16セルに、264.*.jpg と入力
または、
If k = 16 Then sfile = "264.*.jpg"
または、
If k = 16 Then Mid(sfile, 5) = "*"
・ツリー全体表示

【79410】ワイルドカードの使い方
質問  インザーギ  - 17/10/7(土) 10:20 -

引用なし
パスワード
   指定したのファイルを取得して、指定したコピー先にコピーするマクロを
作成していますが、ファイルが一部取得できません。

B15に"NN.jpg"
B16に"264.5.jpg"
B17に"mm.jpg"
の文字列が入力されています。
B16の文字列の5桁目だけ数字が変化します。
ワイルドカードを使用して、取得できるように試みましたが上手く取得できません。下記のコードでどのように変更すれば良いでしょか。


  Dim myFso As Object
  Dim k As Integer
  Dim sfile As String
  Dim sfolder As String
  Dim dfile As String
  Dim dfolder As String
  Dim sPath As String
  Dim dPath As String
  Dim f As String
Set myFso = CreateObject("Scripting.FileSystemObject")
'ファイル名、フォルダ名
  For k = 15 To 17
    sfile = Cells(k, "B").Value
    sfolder = Cells(k, "C").Value
    dfile = Cells(k, "D").Value
    dfolder = Cells(k, "E").Value
    sPath = sfolder & "\" & sfile
    
    ' sfileワイルドカード対応("264.*.jpg" などの入力)
    f = Dir(sPath)
    sPath = sfolder & "\" & f
    dPath = dfolder & "\" & dfile


  '転記先ファイルの削除(念のため)
   If myFso.fileexists(dPath) Then myFso.GetFile(dPath).Delete Force:=True
  'ファイル移動
  If myFso.Folderexists(dfolder & "\") Then
  
   myFso.copyFile sPath, dPath
  End If

  Next
End Sub
・ツリー全体表示

【79409】Re:セルの名前の定義名取得
お礼  りった  - 17/10/5(木) 22:48 -

引用なし
パスワード
   おぉなるほど。
セルからNameを取れるとは、考えもしませんでした。
名前定義は確実にされているので、今回の件にちょうどいいやり方です。
ありがとうございます。
・ツリー全体表示

【79408】Re:セルの名前の定義名取得
発言  マナ  - 17/10/5(木) 19:59 -

引用なし
パスワード
   ▼りった さん:

ActiveCell.Value = ActiveCell.Name.Name

名前定義されていないセルを選択して実行するとエラーになります
・ツリー全体表示

【79407】セルの名前の定義名取得
質問  りった  - 17/10/5(木) 13:00 -

引用なし
パスワード
   特定セルの名前定義の定義名を取得する方法を教えてください。

背景:
かなりでっかい表が有り、日本語で見出しを書いたセルに、英数字で名前定義もしています。
Access化を検討しており、見出しを英数字のものにしたいです。
・ツリー全体表示

【79406】Re:アクティブセルと同番地の別シートの...
お礼  Charo  - 17/10/3(火) 16:27 -

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

Sub ボタン5_Click()
MsgBox Worksheets("2").Range(ActiveCell.Address(0, 0))
End Sub

これでうまくいきました。
大変ありがとうございました。
・ツリー全体表示

【79405】Re:アクティブセルと同番地の別シートの...
回答  カリーニン  - 17/10/3(火) 16:19 -

引用なし
パスワード
   色んな方法がありますが、一例です。

参考です。
ActiveCell.Address(0,0)
・ツリー全体表示

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