EXCELで、下記のような変換を、関数等で自動的に行うことはできるでしょうか?アドバイスよろしくお願いします。


【A】          【B】
1,3,7,12,13  →→  1010001000011

回答の条件
  • 1人2回まで
  • 登録:2006/10/24 17:18:17
  • 終了:2006/10/25 18:46:31

回答(4件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/10/24 17:30:36

ポイント10pt

A1に 1,3,7,12,13と入っているとして

=if(A1="1,3,7,12,13","1010001000011","")

1,3,7,12,13ならば 1010001000011を 返すようにします。

ただ単に2進数にしたいのならば DEC2BIN というのでできますが

セットアップ プログラムを実行して分析ツールを組み込み その分析ツールを登録しないとダメです。

id:ahsodik

今回の場合、1,3,7,12,13部分の数列は、配列、個数が不規則なものを想定していました。説明足らずで申し訳ありません!また、10進数をそのまま2進数に置き換えというわけではないので、ダイレクトにDEC2BINは使えませんが、応用できそうですね。ありがとうございました。

2006/10/25 18:45:10
id:kaiton No.2

kaiton回答回数260ベストアンサー獲得回数342006/10/24 17:54:35

ポイント30pt

A列にデータがあって、B列に一発で計算する方法ではないのですが

  1. A列で[データ]・[区切り位置]で
  2. 「カンマやタブ...」にチェックで[次へ]
  3. 「カンマ」にチェックで[完了]

これで、A列からE列に1,3,7,12,13のようになると思います。

F1=10^-A1 でJ列までコピー

K1=TEXT(SUM(F1:J1)*10^E1,REPT("0",E1))

で"1010001000011"が求められました。


  • カンマ区切りのデータは5個固定なのか、変動するのか?
  • このような計算列は許されるのかどうか?
  • 最大の桁数は?(今回は13)
  • 頭0は? 2,3,7,12,13なら 0110001000011 で良いのか?

あたりの情報があれば、式や方法が変わってきます。

id:ahsodik

ありあがとうございます。

データは最大18桁で、データ個数は固定でないものになります(変動します)。「2,3,7,12,13」なら 「0110001000011」でOKです。

私自身が勉強不足でVBAの知識に乏しいので、関数の応用で計算できれば、非常にうれしいです。データ個数の部分がクリアできればお教えいただいたもの応用し置換できそうですよね。ありがとうございます。

2006/10/25 18:45:15
id:taknt No.3

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/10/24 18:11:52

ポイント25pt

それぞれの位置で 1にするということですね。

VBAでないと ちょっと難しいです。

標準モジュールに

Function henkan(a As String) As String

Dim f As String

Dim e As String

c = ""

e = "0"

For b = 1 To Len(a)

d = Mid(a, b, 1)

If d = "," Then

f = String(Int(c) - 1, "0") & "1"

If Len(f) > Len(e) Then

e = gattai(e & String(Len(f) - Len(e), "0"), f)

Else

e = gattai(e, f & String(Len(e) - Len(f), "0"))

End If

c = ""

Else

c = c & d

End If

Next b

f = String(Int(c) - 1, "0") & "1"

If Len(f) > Len(e) Then

e = gattai(e & String(Len(f) - Len(e), "0"), f)

Else

e = gattai(e, f & String(Len(e) - Len(f), "0"))

End If

henkan = e

End Function


Function gattai(aa As String, bb As String) As String

cc = ""

For ai = 1 To Len(aa)

If Mid(aa, ai, 1) = "1" Or Mid(bb, ai, 1) = "1" Then

cc = cc & "1"

Else

cc = cc & "0"

End If

Next ai

gattai = cc

End Function

といれて セルのほうは

=henkan("1,3,7,12,13")

とすればいいです。

id:ahsodik

やはり、VBAを使わなければ難しいのですね。ご丁寧に解説いただきましてありがとうございます。VBAにあまり詳しくないので、少し事前に勉強しなければなりませんが、お教えいただいたものやってみたいとおもいます。ありがとうございます!

2006/10/25 18:45:18
id:talepanda No.4

talepanda回答回数57ベストアンサー獲得回数122006/10/24 18:23:11

ポイント25pt

ワークシート関数をつくるのでよければ

Function TR(x)
L = Application.WorksheetFunction.Rept("0", Right(x, Len(x) - InStrRev(x, ",")))
N = Split(x, ",")
For Each i In N
L = Application.WorksheetFunction.Replace(L, i, 1, "1")
Next
TR = L
End Function

ワークシート関数の作り方は、

http://www.atmarkit.co.jp/fwin2k/win2ktips/437wsfunc/wsfunc.html

id:ahsodik

VBAでの計算ですね、ありがとうございます。私自身が勉強不足でVBAに詳しくないので、お教えいただいたURLとマクロの部分参照させていただき、なんとかやってみたいとおもいます。ありがとうございました!

2006/10/25 18:45:20
  • id:kaiton
    #2の回答者です。 #4のVBAがきれいですね...
    最大18桁なら、#2の方法では無理かも...
    エクセルの有効桁数は15..

    どうしても関数なら、最大18で、A:Rに区切り位置で展開されるので
    #4のかたのVBAを参考に
    S1=REPLACE(REPT("0",MAX(A1:R1)),A1,1,"1")
    T1=IF(ISNUMBER(B1),REPLACE(S1,B1,1,"1"),S1) AJまでコピー
    このAJ列の値が求めるものだと思います。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません