C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

動作するかしないかは何が影響していますか? /栄久世留白音 (22/04/27(Wed) 11:43) #99561
Re[1]: 動作するかしないかは何が影響していますか? /栄久世留白音 (22/04/27(Wed) 12:46) #99563
│├ Re[2]: 動作するかしないかは何が影響していますか? /伝説のカレー (22/04/27(Wed) 13:13) #99565
│└ Re[2]: 動作するかしないかは何が影響していますか? /radian (22/04/27(Wed) 13:12) #99564
│  └ Re[3]: 動作するかしないかは何が影響していますか? /栄久世留白音 (22/04/27(Wed) 13:34) #99566
│    └ Re[4]: 動作するかしないかは何が影響していますか? /radian (22/04/27(Wed) 14:44) #99567
│      └ Re[5]: 動作するかしないかは何が影響していますか? /くま (22/04/27(Wed) 17:09) #99568
Re[1]: 動作するかしないかは何が影響していますか? /大谷刑部 (22/04/28(Thu) 10:41) #99570


親記事 / ▼[ 99563 ] ▼[ 99570 ]
■99561 / 親階層)  動作するかしないかは何が影響していますか?
□投稿者/ 栄久世留白音 (1回)-(2022/04/27(Wed) 11:43:58)

分類:[Microsoft Office 全般] 

エクセル2013で作った関数(マクロ?)を
2016に持っていくと動作しなくなりました。

原因がわかりません。
以下コード(一部削除)です

Function func (name as string) as long
For irowno = 2 To UBound(var, 1)
If sheet1.Cells(irowno, 1) = name Then
Exit For
End If
Next
func = sheet2.Cells(irowno, 1)
End Function

2013ではこれでも動作していました。
しかし、2016では動作しません。#N/A がセルに表示されました。
以下のようにすると動作しました。

Function func (name as string) as long
For irowno = 2 To UBound(var, 1)
If sheet1.Cells(irowno, 1) = name Then
rowindex = irowno ←これを追加する
Exit For
End If
Next
func = sheet2.Cellsrowindex 1)
End Function

ここで問題なのですが、動作する場合と動作しない場合があるのは
エクセル2013とエクセル2016のバージョンの違いで
処理がかわるものなのかそれとも、
何かの設定が違うことで発生しているのか
原因がわかる方は教えてください。
発生するPCは必ず発生し、発生しないPCは必ず発生しません。




[ □ Tree ] 返信 編集キー/

▲[ 99561 ] / ▼[ 99565 ] ▼[ 99564 ]
■99563 / 1階層)  Re[1]: 動作するかしないかは何が影響していますか?
□投稿者/ 栄久世留白音 (3回)-(2022/04/27(Wed) 12:46:12)
追記になります。

変更後2016で治ったと思ったのですが
症状が発生しました。2013では問題ありません。

[ 親 99561 / □ Tree ] 返信 編集キー/

▲[ 99563 ] / 返信無し
■99565 / 2階層)  Re[2]: 動作するかしないかは何が影響していますか?
□投稿者/ 伝説のカレー (5回)-(2022/04/27(Wed) 13:13:10)
No99563 (栄久世留白音 さん) に返信

変数とかシートの値とかがおかしいんじゃないですかね、わからないですけど
Office365ではこれで動きました

Sub Main()
    Dim a As Variant
    ReDim a(2, 0)
    a(0, 0) = "a"
    a(1, 0) = "b"
    a(2, 0) = "c"

    Sheet1.Range("A2:A4").Value = a
    
    Dim b As Variant
    ReDim b(2, 0)
    b(0, 0) = 1
    b(1, 0) = 2
    b(2, 0) = 3
    
    Sheet2.Range("A2:A4").Value = b
    
    Debug.Print func("a")
    Debug.Print func("b")
    Debug.Print func("c")
End Sub

Function func(name As String) As Long
    Dim irowno As Long
    
    Dim Var As Variant
    Var = Sheet1.Range("A2:A4").Value
    
    For irowno = 2 To UBound(Var, 1)
        If Sheet1.Cells(irowno, 1) = name Then
            Exit For
        End If
    Next
    
    func = Sheet2.Cells(irowno, 1)
End Function

[ 親 99561 / □ Tree ] 返信 編集キー/

▲[ 99563 ] / ▼[ 99566 ]
■99564 / 2階層)  Re[2]: 動作するかしないかは何が影響していますか?
□投稿者/ radian (38回)-(2022/04/27(Wed) 13:12:00)
2022/04/27(Wed) 13:19:51 編集(投稿者)

まずソースに記載されていない変数がいきなり出てきているので、
そこがどう影響しているのか不明です。
関数の外で宣言された変数でしょうか?
Option Explicitをソース先頭に記述して変数を必ず宣言して使うようにして、
デバッグでステップ実行して、ウォッチで変数の値を確認するという
基礎的な所から始めたほうが良いでしょう。
[ 親 99561 / □ Tree ] 返信 編集キー/

▲[ 99564 ] / ▼[ 99567 ]
■99566 / 3階層)  Re[3]: 動作するかしないかは何が影響していますか?
□投稿者/ 栄久世留白音 (4回)-(2022/04/27(Wed) 13:34:26)
皆さんありがとうございます。

追記です。

色々調べています。
セルをコピーするときに

コピーするセルで[ctrl]+[C] でコピーを行い。
コピー先のセルで[ctrl]+[V] で貼り付けを行う場合は問題ありませんでした。

コピーするセルを右クリックして、ポップアップメニューからコピー
コピー先のセルを右クリックして、ポップアップメニューから貼り付けを
行うと症状が出ます。
2013では問題ないです。

ちなみに、セルの中身は以下のようにしています。
=func ("aaa")


Function func (name as string) as long
 func = 0
End Function

で行っても同じ症状でした。

関数の中身というよりエクセルのコピー、貼り付けに問題があるような
気がします。

[ 親 99561 / □ Tree ] 返信 編集キー/

▲[ 99566 ] / ▼[ 99568 ]
■99567 / 4階層)  Re[4]: 動作するかしないかは何が影響していますか?
□投稿者/ radian (39回)-(2022/04/27(Wed) 14:44:53)
2022/04/27(Wed) 14:48:51 編集(投稿者)

No99566 (栄久世留白音 さん) に返信
> 関数の中身というよりエクセルのコピー、貼り付けに問題があるような
> 気がします。
というか、関数に関係無い所で想定外の動きしてそうだけど。
デバッグで一行づつ実行すればすぐ判るんだから、とりあえずやってみれば?

【超初心者向け】エクセルVBAでデバッグをする方法を解説します
https://www.excelspeedup.com/vbadebug/
[ 親 99561 / □ Tree ] 返信 編集キー/

▲[ 99567 ] / 返信無し
■99568 / 5階層)  Re[5]: 動作するかしないかは何が影響していますか?
□投稿者/ くま (194回)-(2022/04/27(Wed) 17:09:36)
まず
元にしているExcelのファイル自体を新規に作成して試してみて下さい。
(シートとかもできればコピーしないで再度新規に作成)

VBE(VBA)のコンパイルコードが変に残ってうまく動かない場合があります。



[ 親 99561 / □ Tree ] 返信 編集キー/

▲[ 99561 ] / 返信無し
■99570 / 1階層)  Re[1]: 動作するかしないかは何が影響していますか?
□投稿者/ 大谷刑部 (189回)-(2022/04/28(Thu) 10:41:11)
No99561 (栄久世留白音 さん) に返信
> ここで問題なのですが、動作する場合と動作しない場合があるのは
> エクセル2013とエクセル2016のバージョンの違いで
> 処理がかわるものなのかそれとも、
> 何かの設定が違うことで発生しているのか
> 原因がわかる方は教えてください。
> 発生するPCは必ず発生し、発生しないPCは必ず発生しません。

まず、イミィエイトウインドウで、関数の引数をセルで指定しているのと同じ値にして、
関数自体が異常な戻り値を返すのか、関数自体は正常だが式エディターで指定すると異常な動きをするかを切り分けた方がいいでしょうね。
マクロが動かない系はまず拡張子を疑いますが、それは2013でも発生するはずなのでおそらく違うと思います。
多分セキュリティー設定が原因の可能性が高い気もします。
バグで動かないなら2013でも発生しそうですので。

[ 親 99561 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -