質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1393閲覧

Excelのセルを選択してマクロの引数にしたい

_12ash

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/12/27 04:36

前提・実現したいこと

Excelで2つの文字列(「あいうえお」と「あかさたな」など)を1文字ずつに分割して(「あ」「い」「う」…と「あ」「か」「さ」…)文字列1と文字列2のどこまでが一致しているのかを確認するマクロをVBAで作っています。
VBAをほとんど触ったことがないため様々なサイトで調べながら書いたのですが、どのようにすればセル番号(A1,B3など)を引数にすることができますか?(=Hikaku(A1,B1)のようにつかいたいです)
また、セルの中に結果を表示したいのですが、それはコード中のどこに記述するのでしょうか?(Java等におけるreturnのようなキーワードがあるのでしょうか?)
現在のコードは以下の通りです。 

該当のソースコード

Function Hikaku(a As String, b As String) Set a = Selection Set b = Selection cell1 = a.Text cell2 = b.Text Dim leng2 As Integer leng2 = Len(cell2) Debug.Print (leng1) Dim leng2 As Integer leng2 = Len(cell2) Rem sel1を切り分ける str1 [] = Split(cell1, "", 1, vbTextCompare) Rem awl2を切り分ける str2 [] = Split(cell2, "", 1, vbTextCompare) Dim i As Integer i = Min(leng1, leng2) Dim a As Boolean For m = 0 To i a = str1 = str2 Debug.Print i & "行" Next If (a.Value = False Or m = i) Then Dim pars As Double pars = i / Min(lemg1, lemg2) * 100 End Function

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mdj

2021/12/27 05:00

「cells range」でググったらもう少し話が進むかなーとおもいます。
_12ash

2021/12/27 05:47

ありがとうございます。ググってみて Function Hikaku(arg As Range) arg = arg.Text Dim leng1 As Integer leng1 = Len("arg") Hikaku = leng1 End Function というのを試しに作ったのですが(セル内の文字数が帰ってくるはずと想定して作った関数です)、#VALUE!になってしまいました……もう少し調べてみたいと思います。また何かアドバイスがあったら教えてください。
bebebe_

2021/12/27 06:19

Sub Hikaku() Dim leng1 As long leng1 = Len(Cells(1, "A").Value) Cells(1, "A").Value = leng1 End Sub のような感じではだめですか?
_12ash

2021/12/27 07:58

bebebeさんありがとうございます! 特定の列ではなくその列が挿入等によって動いても維持できるようにしたかったため、最終的にはベストアンサーさんのお返事に載せたようなコードになりましたが、自力で試行錯誤していた時には寄せていただいたコードも参考にさせていただきました。ありがとうございます!
guest

回答1

0

ベストアンサー

(=Hikaku(A1,B1)のようにつかいたいです)

セルに=Hikaku(A1,B1)という式を設定して結果を表示したいということでしょうか。それなら、いわゆるユーザー定義関数というものですね。
「ユーザー定義関数」をキーワードに検索すると解説ページがいろいろ見つかるのでそれで勉強してみてください。

あと、様々なサイトで調べながらとのことですが、提示のコードはVBAではありえないものがあります。VBAの解説サイトかどうか確認してから参考にしてますか。
まずは、初心者向けの解説サイトで基本から学習したほうが早道だと思います。

とりあえず、セルのテキストの文字数を返すユーザー定義関数を参考に提示しておきます。

標準モジュール

vba

1Function Hikaku(a As String) As Long 2 3 Hikaku = Len(a) 4 5End Function

セルに下記の式を設定するとそこに指定セルの文字数が表示されます。

Excel

1=Hikaku(A1)

やりたいことがよくわからないですが、
文字列を先頭から比較していってどこまで一致しているのかその文字数を表示するというユーザー定義関数を提示しておきます。

vba

1Function Hikaku(a As String, b As String) As Long 2 Dim i As Long, l As Long 3 l = Len(a) 4 If l > Len(b) Then l = Len(b) 5 For i = 1 To l 6 If Mid(a, i, 1) <> Mid(b, i, 1) Then Exit For 7 Next 8 Hikaku = i - 1 9End Function

投稿2021/12/27 06:36

編集2021/12/27 06:49
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_12ash

2021/12/27 07:55

ありがとうございます!VBA Excel等の単語で調べて引っかかったサイトを手あたり次第見ていたため、不正確な情報が多かったようです……いただいた回答をもとに以下のようにして割合を調べるユーザー定義関数を作りました!(ほとんど真似ですが……) Function newHikaku(a As String, b As String) As Double Dim i As Double, l As Double l = Len(a) If l > Len(b) Then l = Len(b) For i = 1 To l If Mid(a, i, 1) <> Mid(b, i, 1) Then Exit For Next Dim onazi As Double onazi = i - 1 Dim kekka As Double kekka = (onazi / l) * 100 kekka = Round(kekka, 2) newHikaku = kekka End Function 回答者さんや質問欄に寄せていただいたアドバイスをもとに、正確な情報を学び直したいと思います! 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問