Excel VBA質問箱 IV

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

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


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

【81157】Re:ユーザー定義関数、シート上とコード...
回答  γ  - 20/1/7(火) 20:42 -

引用なし
パスワード
   Excel のユーザー定義関数の制限について
ht tps://support.microsoft.com/ja-jp/help/170787/description-of-limitations-of-custom-functions-in-excel
には、
>正しい計算を行うには、計算で使用されるすべての範囲を引数として関数に渡す必要があります。
と記載されています。
祝日のテーブルを引数として追加すれば、両者は一致すると思います。
・ツリー全体表示

【81156】ユーザー定義関数、シート上とコード内の...
質問  hoyahoyamachine  - 20/1/7(火) 11:50 -

引用なし
パスワード
   こんにちは。
初めて質問いたします。

ユーザー定義関数で、シート上での結果とコード内での結果に違算があり、原因がつかみかねています。

マイクロソフトのユーザー定義関数の制限によるといろいろ書いてありますが、
特段プロパティもメッソドも使わず、セル値を変更することもなく、ただ参照しているだけのコードです。具体的には以下の通りです。

ワークシートDB とワークシートHolidayがあり、DBにはテーブルがセットされ、以下のフィールドとデータがあります。

ワークシートDBの一部
PerDay  Quantity  StDate  EnDate
14.4    400   20/1/7  =EnDate([@PerDay],[@Quantity],[@StDate])

ワークシートHoliday、セルA1から下方へセット
Holiday
2020/1/1
2020/1/2
2020/1/3
2020/1/4
2020/1/5
2020/1/12
2020/1/19
2020/1/25
2020/1/26
2020/2/1
2020/2/2
2020/2/9

Function EnDate(ByVal PerDay As Single, Quantity As Single, StDate As Date) As Date
'日産、生産数量、開始日から終了日を休日リストを参照しつつ求める
Dim wsHoliday As Worksheet
Dim ProdDays As Single, d As Date, h As Range
  ProdDays = Quantity / PerDay '生産日数をセット
  Set wsHoliday = Worksheets("Holiday") 'ワークシートのセット
  d = StDate '基点をセット
  Do Until ProdDays <= 0 '生産日数が0以下になればDoLoop終了
    For Each h In wsHoliday.Cells(1, 1).CurrentRegion '休日それぞれについて
      If d = h.Value Then '日付と休日が一致すれば
        ProdDays = ProdDays + 1 '生産日数を一日増やす
      End If
    Next h
    ProdDays = ProdDays - 1 'ループ一回ごとに生産日数を一日減らす
    d = d + 1 '次の日をセット
  Loop
  EnDate = d '終了日を返す
End Function

結果、シート上では2020/2/4、コード実行の結果は2020/2/11 でした。
シート上では休日が加算されていない感じですね。

原因がつかめないので、ChangeイベントでEnDateを実行するようにしたのですが、今後の知見のためにもご教授いただきたくよろしくお願いいたします。
・ツリー全体表示

【81155】Re:2列を参照とするVlookup風の処理
発言  Jaka  - 20/1/7(火) 2:43 -

引用なし
パスワード
   なんとなくだけど、
SUMIFSやらSUMPRODUCTで、拾えそうな気がする・・・。
・ツリー全体表示

【81154】Re:フォルダの中のブックを開きたい
お礼  ken  - 19/12/30(月) 9:05 -

引用なし
パスワード
   ▼よろずや さん:

>zipフォルダに入れないよう、周知するのがよろしいかと。

御教授有り難うございます。
他部署で圧縮された物を読み取り専用で見ています。
開いた状態で処理するようにします。
・ツリー全体表示

【81153】Re:フォルダの中のブックを開きたい
回答  よろずや  - 19/12/27(金) 16:39 -

引用なし
パスワード
   ▼Ken さん:
>フォルダを調べたところ.zipフォルダでした。
>圧縮してあったみたいです。
>普通のフォルダの場合はbookが開けました。
>この場合開いた状態で処理するしかないみたいです。
>圧縮フォルダの場合の開き方などは有るのでしょうか?

「vbaでzipの圧縮・解凍をやらせてみる」で検索。

拡張子が .xlsx のファイルの実態はzipファイルです。
zipフォルダに入れてもそれ以上小さくなることはありません。

zipフォルダに入れないよう、周知するのがよろしいかと。
・ツリー全体表示

【81152】Re:フォルダの中のブックを開きたい
質問  Ken  - 19/12/27(金) 13:37 -

引用なし
パスワード
   jakaさん、よろずやさんお世話になります。

フォルダを調べたところ.zipフォルダでした。
圧縮してあったみたいです。
普通のフォルダの場合はbookが開けました。
この場合開いた状態で処理するしかないみたいです。
圧縮フォルダの場合の開き方などは有るのでしょうか?
・ツリー全体表示

【81151】Re:フォルダの中のブックを開きたい
発言  Jaka  - 19/12/27(金) 11:14 -

引用なし
パスワード
   ひょっとして、キーボードだけで選択確定とかしてないですかね?
同じような質問が過去にありました。
当時は、試してみて単純にOSとの連携のせいと感じたので、
Doevents を何発か入れたら解決できました。
そのように回答したら、
質問者は、1つで解決できましたとの事だったような。
・ツリー全体表示

【81150】Re:フォルダの中のブックを開きたい
発言  よろずや  - 19/12/27(金) 10:55 -

引用なし
パスワード
   現象を再現できません。

新しい名前(不確定名)のフォルダ名
及び、ファイル名は何ですか?

その場所に別のファイルを置いて、それを開くとどうなりますか?
・ツリー全体表示

【81149】Re:フォルダの中のブックを開きたい
質問  Ken  - 19/12/27(金) 9:03 -

引用なし
パスワード
   ▼よろずや さん:

お世話になります。
説明不足でお手数をお掛けします。

記述内容は
 
  With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "\\計画\2019年度"
    If .Show Then
      FileName = .SelectedItems(1)
      Workbooks.Open FileName
    Else
      MsgBox "ファイルを指定してください。"
      End
    End If
  End With

「2019年度」のフォルダの中に月別のbookがありますが
年度が更新すると新しい名前(不確定名)のフォルダが追加され
そのフォルダの中に6ヵ月分のbookが入ります。
普通は「2019年度」からbookを開いて処理するのですが
新しい名前のフォルダを開こうとすると
"Workbooks.Open FileName"のところで
「実行時エラー'1004
Openメソッドは失敗しました」エラーが出てしまいます

新しいフォルダの月別のbookの開き方がわかりません
宜しくお願いします。
・ツリー全体表示

【81148】Re:フォルダの中のブックを開きたい
発言  よろずや  - 19/12/26(木) 19:47 -

引用なし
パスワード
   ▼Ken さん:
>年度が代わるとフォルダの中に更にフォルダが追加され
>そのフォルダを開こうとするとエラーになってしまいます。

どんなマクロを書いてますか?
・ツリー全体表示

【81147】フォルダの中のブックを開きたい
質問  Ken  - 19/12/26(木) 17:15 -

引用なし
パスワード
   いつもお世話になっております。
質問させて下さい。
フォルダの中のブックを開いて処理をするマクロを作っていますが
フォルダのアドレスを指定してダイヤログからブックを選んでいましたが
年度が代わるとフォルダの中に更にフォルダが追加され
そのフォルダを開こうとするとエラーになってしまいます。
この場合どの様に記述したら良いのででしょうか?
・ツリー全体表示

【81146】Re:品名と数値をリンクして表示させたい
発言  Jaka  - 19/12/25(水) 23:48 -

引用なし
パスワード
   ▼てべす さん:。
>VLOOKUP関数等調べてみましたが、VLOOKUPを使うまでも無く簡単な関数で出来ないかと思い質問させて頂きました。

意味が良く解らない。
VLOOKUPが一番簡単だと思うけどね。

=CHOOSE(MATCH(A1,{"イチゴ","リンゴ"},0),50,100)

ひょっとしてこういうやつ?

=IF(A1="イチゴ",50,IF(A1="リンゴ",100,""))
・ツリー全体表示

【81145】品名と数値をリンクして表示させたい
質問  てべす  - 19/12/25(水) 20:42 -

引用なし
パスワード
   当方Excel初心者です。
Excelで見積表を作成する際、ある品名を入力したら、その品名の金額(数値)が表示されるようにしたいです。
例えば、
リンゴが100円
イチゴが50円
と言った場合、「リンゴ」と入力したら、隣のセルに「100円」となる様にしたいです。
VLOOKUP関数等調べてみましたが、VLOOKUPを使うまでも無く簡単な関数で出来ないかと思い質問させて頂きました。
有識者様の御回答お待ちしております。
・ツリー全体表示

【81144】Re:変数内容の保持
発言  γ  - 19/12/17(火) 12:19 -

引用なし
パスワード
   なにか解決したようですが、
Public変数の有効期間は絶対的なものではないという記事を
Microsoftが出しています。
ワークシートに保持するのが確実だと、MS社は言っていますね。
ご参考まで。

ht tp://web.archive.org/web/20090909235324/ht tp://support.microsoft.com/kb/408871/ja

2カ所にスペースを入れているので修正してください。
(セキュリティの関係でhtxxをそのままでは投稿できない決まりのようです)
・ツリー全体表示

【81143】Re:変数内容の保持
お礼  質問者  - 19/12/16(月) 13:28 -

引用なし
パスワード
   私の大きな間違いでした。
パブリック変数の宣言位置の間違いで、変数保持がブック内で保たれていませんでした。
ご回答願った皆様、陳腐な質問ですみませんでした。
・ツリー全体表示

【81142】Re:変数内容の保持
発言  質問者  - 19/12/16(月) 10:03 -

引用なし
パスワード
   やはり、標準モジュールのサブプロシージャーとプライベイトサブプロシージャーの間ではパブリック宣言を行っても変数の供用は行えないのでしょうか?
何か変数の受け渡しを行う方法は無いでしょうか?
・ツリー全体表示

【81141】Re:変数内容の保持
発言  よろずや  - 19/12/14(土) 13:04 -

引用なし
パスワード
   昔のバージョンで「変数宣言の強制」を使っていると
そのような現象がありました。
以来、手打ちで「Option Explicit」と書いてます。
・ツリー全体表示

【81140】Re:変数内容の保持
発言  γ  - 19/12/13(金) 23:29 -

引用なし
パスワード
   Public変数の宣言を読み落としていました。失礼しました。
・ツリー全体表示

【81139】Re:変数内容の保持
発言  Jaka  - 19/12/13(金) 21:20 -

引用なし
パスワード
   Sub mmmaa()
MsgBox 名前
End Sub

を追加して、新規シートをを挿入した後に上を実行するとしっかり
Sheet1 (2)
を保持してました。
by win7 & Excel2007

因みに10分以上は、保持してました。(途中で閉じたためそれ以降不明)
・ツリー全体表示

【81138】Re:変数内容の保持
発言  γ  - 19/12/13(金) 20:59 -

引用なし
パスワード
   Subプロシージャ"シートコピー"を
Functionプロシージャに変更して、
 シートコピー = 名前
として、返り値にすれば情報を戻すことができます。

説明がわかりにくいですね。
ですから、詳細(例えばいつ名前をつけるのか)は不明ですが、
とりあえずの回答をしておきます。
・ツリー全体表示

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