「忠犬もちしば」のAIボットを作ろう!

年末年始を使い、マクロとVBAの勉強をしてます。
参考書通りにやれば、もちろん操作はできますが、これを実生活(仕事)で生かそうとするのは難しいかなと思います。

例えば構文の場合、繰り返しの処理をしたいときに
"for○○ = ☆ to ☆☆"という他に、場合によっては"do until ☆ loop"という構文を使う場合もあると知りました。

たぶん今の私だと、どういったときにfor、どういったときにuntilを使うのかわからず、適当にforの構文を入れてエラーになりお手上げになる気がします。
その他、演算子にしても、まだまだうまく使い分けられないと思います。

普段プログラミングをやっている方は、どのように覚えましたか?
やはり慣れでしょうか?

「プログラムの演算子や構文、どう覚えました」の質問画像

A 回答 (8件)

最初にうちは使い分けを考える必要はありません。


どの構文でもよいので、とにかく処理が書ける様になることが大事です。

アルゴリズムを自分で組み立てる程度に習得した後で、
考えたアルゴリズムを実装したいのに綺麗に書けない、と感じた時に、
改めて教科書を読みなおして他の構文が使えないか検討してみてください。
    • good
    • 2
この回答へのお礼

ありがとうございます!とにかく量ですね。
疑問が湧くようになってきたら若干知識がついてきた段階なのかなと思います。
まずはそこまでを目指します。

お礼日時:2019/01/16 22:48

書籍を真似て動作が確認できているのであればもう一歩ですよ!



後は自分なりにコードの内容を少しづつ変更してみてはどうですか?

例えば繰返し処理を挙げられていたのでForをdoに書き換えてみたりなどして

もっと短く書けるコードが見つかるかもしれません。
(変数1つ減らせたりネストが浅くなったり)

はやりそれには他の人のコードを見るのが勉強になります。
    • good
    • 1
この回答へのお礼

ありがとうございます。
問題集の回答例でも、何パターンかコードが書かれており、それを見るだけでも勉強になりました(書けませんが…)。
今は実験の繰り返しですね。頑張ります!

お礼日時:2019/01/16 22:50

こんばんは。



私は、あまり人にどうこう言えるような立場ではありませんが、一応、覚えたつもりになっています。私は、No.2さんと同じで、信頼のおける諸先輩の回答をみながら掲示板で覚えました。信頼がおけない人でも、技術力がある人のコードはやはり試してみることは大事ですが、下手にコメントを書くと、とんでもない言いがかりをする困った人もいます。

以前の「教えて!goo」でも、回答者同士で教えたり・教わることも多かったのでしたが、今は、「規約違反だ」といってくる人がいるのはとても残念です。

ここの掲示板も回答者のレベルが常連では、かなり一定した基準以上になりましたね。

確か、C言語の本を書いているハーバート・シルトという人だったと思いますが、コードを500書けば、一通り覚えるといっていました。一日3つのコードを書けば、4ヶ月程度で終わるということです。実際に、そういう人もいます。だいたいは、3年がひとつの目処だとは思います。

それと、私が掲示板を読んでいて気になるのは、「学習の中途で質問するな!」ということです。そこを気にしたら、先に進めないからです。

"for○○ = ☆ to ☆☆" と "do until ☆ loop"

どちらがどうというのは簡単ですが、掲示板などを1ヶ月でも眺めていれば、自分自身で気が付きます。そして、デバッグをマスターすれば、上達します。

ちなみに、そのときに、インデンターがあると、ミスを見つけやすいです。
http://www.oaltd.co.uk/Indenter/Default.htm

プログラミングは語学と同じでしょうね。人によっては海外に行って現地の人と話をするとか、仕事で接待に喋れるようにしたいとか、目的は様々です。しかし、私のように、なんの目的もなくやっている人もいます。それは、どちらかというと、語学よりも数学を勉強するような感覚です。ある方は、VBAの訓練として、数学を勉強すると良いと言っていましたが、その人は、3年足らずでプロになってしまいました。

VBAは、学習段階では途中で思いついて何かを作ろうとしても形にならないことが多いようです。せめて、VBAの教科書(テキスト)をお持ちなら、最初のページから最後までページまでやり終えてから、何をしたいか決めたほうがよいと思います。その間は、辛抱です。

なお、私は、No.5さんのおっしゃる勉強すること自体が目的になっているかもしれませんね。目標も持たないもので「今のレベル」の意味合いもあるかと思いますが、それを越えられないといわれればその通りです。でも、それが悪いと思っていないのです。Ribbon Customizeにしても、Excel DNAにしても、また、 Git.Hub での管理するための Ariawase にしても、覚える必要性も使う必要性も何もありません。でもやっていて楽しいわけです。

「越えられない」というのは、何が問題かと言えば、VBA自体をベースに考えるから、ボーダーラインを越えていかないのだろうと思います。それにつけても、15年を過ぎても、知らないことはいっぱいあります。しかし、多くの人が、Excel VBAを見切りをつけて去っていきました。
    • good
    • 1
この回答へのお礼

大変詳しくありがとうございました。
最後の、多くの人がVBAに見切りをつけたという御文が気になります。
実はVBA、マクロ以外にも語学を学んでいますが、いちいち疑問が出てきます。小さな疑問も大事と思いつつ、後からわかることも多いので、とりあえず「そういうもんだ」で流すのも大事なのかもしれません。

せっかく熟練した回答者同士が、見下したような言葉を吐いたり、お互いに教えあう空気を邪魔するのは残念ですね…。
これからプログラミング言語を学ぶ方はもっと増えると思うので、争いごとは極力ないことを願ってます。

お礼日時:2019/01/16 23:22

プログラミングって明確な目的がないとなかなか覚えられないし、仮に覚えてもすぐ忘れます。

こんなこと言うと怒られるかも知れませんが、勉強することじたいが目的になっている勉強だと、おそらく今のレベルを脱するのは困難な気がしますね。

これがマクロじゃないとできない(量が多すぎて手作業でやってられない)ことをさせたい!現に今困ってるんだ!みたいな目的がある人は強いんですが…。何かそういう目的・ネタはありませんか?それがあれば、最初はとにかく動きゃいい、動くようになるまでの過程でいろいろ経験していくことが最も良い勉強だと私は思っています。また実際に困ってることが解決できるかも知れないとなったら、そう簡単にあきらめないですし。
    • good
    • 2
この回答へのお礼

ありがとうございます。おっしゃる通りだと思います。参考書だけ見ても本当すぐ忘れます。
ネタといえば、マクロを勉強するきっかけとなった、前任者が作ったマクロ入りExcelの破損を直すことです。
社で購入した物品に対し、何を目的に購入したかを記入するシートがあるのですが、こちらに記入をすると、目的ごとに分かれたシートに自動反映されるという仕組みのものがあります。何がきっかけかこちらがうまく作動しなくなり、手入力したらデータが消えるなど困っていました。
このシートのVBA画面を見たら、そもそも標準モジュール画面がなくて、なおさら??だったのですが…
明日出社したらもう一度その表を見てみます。週末の勉強用に、そのシートをUSB経由で自宅PCにコピーしたいくらいです。

お礼日時:2019/01/16 23:10

①普段から、自分で作った、使い慣れた構文で作ったプログラムを基本にして、修正しながら、使いこなしていく。


 自分の引き出しを多く持っていることで、仕事上での効率化、エラー、原因不明でのデバック期間を短くする。
 できるだけ、コメント文を多く残しておくと、後々、修正したり、見直す時に楽です。
②勉強して、新しいことを学んだときは、その部分だけを色々と試す。どんな風に動くか、どんなエラーが発生するかを調べて見る。
③自分が陥りやすいエラーやその対処方法をできるだけ、メモで残しておく。
 →エラーが出てくると、そこを直せば良いのでデバックはやり易い。厄介なのはエラーに引っかからずに値がおかしい状態になる場合で
 色々と原因を探りながら、追及していく。結局慣れでしょう。
 
>たぶん今の私だと、どういったときにfor、どういったときにuntilを使うのかわからず、適当にforの構文を入れてエラーになりお手上げになる気がします。
上記、②、③が参考になるのではないでしょうか?。
仕事時は使い慣れているものが一番。勉強の時に、新しいものも試してみる。

>その他、演算子にしても、まだまだうまく使い分けられないと思います。
慣れですね。

>普段プログラミングをやっている方は、どのように覚えましたか?
自分が使い慣れた本に、附箋を貼ったり、書込みを入れたりして、手元に置きながら、見直し用にしています。

一緒に仕事をしていた女性のプログラマは、日頃、使う構文等をエクセルで自分で作って、机の前に置いていました(すごいなと思いました)

私の場合、無理に覚えるのではなく、ポインタ先を準備しておくという感じですね。
ここの質問・回答をちょこちょこ見ておくと、結構勉強にもなりますよ。(質問のサンプルを自分でrunしてみたりもして、能力の幅を広げています)
    • good
    • 1
この回答へのお礼

大変丁寧にありがとうございます。日々勉強ですね。女性プログラマの方を見習わないます。
仕事で使っているシートに、前任者がマクロを仕込んでいたのですがそれがうまく作動しておりません。
原因がわかればと思い勉強し出しまたのですが、ちんぶんかんぷんです。むしろ、VBA画面を出したところ、標準モジュールがなさそうで、最初から何だこりゃ状態です。
参考書のように、1度習ったらすぐに応用効くようになれればいいのですが…。
いろいろと難しさを感じていますが、入門から初級のレベルまで上げられるよう頑張ります。

お礼日時:2019/01/16 23:05

何回も繰り返して覚えます。


実生活にどう生かすかなんて考えは無く、ただの興味だけです。
仕事であれば、それが生活のためになります。
目的も興味もないならば、覚えても意味がありません。
    • good
    • 1
この回答へのお礼

ありがとうございます。
私の場合は目的があり、最終的には転職または副業してお金を稼ぎたいと思っています。
独学でやっている方や学校で習っている学生よりも知識が乏しいのはわかってますが、やらなきゃ本当にゼロなのでできるところまでやるつもりです。

お礼日時:2019/01/16 22:58

私は質問サイトに上がる回答を見てどのように作っているのか質問者さんと同じ状況(ブックを作ってみる)で回答コードを試す。


そんな事を繰り返しながら『どう言った時にどう言う物が使われているか』を学んでいきました。

For To ~ Next ですと私なら For Each ~ Next を使う機会が多いですね。
それも何回も繰り返して検証をした結果、どれが使いやすいのかを選択した感じです。
その間に自身も回答者となってコードを作ってみては諸先輩に指摘を受けて直してみたりと、昔は回答者同士でも教えあう雰囲気がありましたから。
なのでそこそこ勉強させてもらいましたよ。(回答者で参加してるのに質問しちゃったりとかも)

なんか今はベストアンサー争いが激しいためかそう言う感じではなくなってきたみたい。(ここ7年位は)
    • good
    • 1
この回答へのお礼

ありがとうございます!
教えあう風土は良いですよね。マイノリティであるプロのゲーマーの方々は互いに教えあうと、情熱大陸で放送していました。
環境は変わっていくものですね…

実例を基に仕組みを考えるのは良い勉強になりそうですね。
今は、いちいち「each VBA 意味」のように検索してはつっかかり、検索しては「あぁこういう意味なのかな」という状態です。
早いところ、この1から苦しい状態を抜けられるようさぼらず勉強します。

お礼日時:2019/01/16 22:56

>>たぶん今の私だと、どういったときにfor、どういったときにuntilを使うのかわからず、適当にforの構文を入れてエラーになりお手上げになる気がします。



別にuntilを使う必要が無いなら、使わなければいい。
forよりも、untilを使うほうがプログラムが分かりやすくなると思える場面があれば使えばいいだけのことですよ。
    • good
    • 1
この回答へのお礼

ありがとうございます。
使い分けができるようになるまでが当面の目標ですね。
今は、参考書を3日も見なくなると本当にほぼ忘れます↓
早く、転職できるほどのスキルを身につけたいのですが。勉強頑張ります。

お礼日時:2019/01/16 22:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QプログラミングVBAについてです。 やり方を教えて下さい。よろしくお願いいたします。

プログラミングVBAについてです。
やり方を教えて下さい。よろしくお願いいたします。

Aベストアンサー

何かの課題のようなので、ヒントのみです。

どこがわからないのかも不明で、単なる丸投げ的な質問になっちゃってますが、大きく分ければ
・設問の意味や考え方がわからない
 (プログラミング言語とは関係なくアルゴリズム等の理解の問題)
・コードを作成できない
 (プログラムのフローを考える力と、言語知識の問題)
のどちらなのでしょうね?(両方なのかも)

ひとまず、このあたりが参考になるかも?
(検索すれば他にもいろいろ見つかると思いますが)
長方形積分と台形積分の説明とコード(C言語)
https://www.vcssl.org/ja-jp/code/archive/0001/3000-integral-rectangular/
https://www.vcssl.org/ja-jp/code/archive/0001/3000-integral-rectangular/

VBAでの例
https://excelmath.atelierkobato.com/trapzoid/

おまけ(シンプソン法の例)
http://shimaphoto03.com/program/simpson-vba/

何かの課題のようなので、ヒントのみです。

どこがわからないのかも不明で、単なる丸投げ的な質問になっちゃってますが、大きく分ければ
・設問の意味や考え方がわからない
 (プログラミング言語とは関係なくアルゴリズム等の理解の問題)
・コードを作成できない
 (プログラムのフローを考える力と、言語知識の問題)
のどちらなのでしょうね?(両方なのかも)

ひとまず、このあたりが参考になるかも?
(検索すれば他にもいろいろ見つかると思いますが)
長方形積分と台形積分の説明とコード(C言語)
ht...続きを読む

Qオブジェクトの中見からっぽなのにループぬけちゃったーー。どしてぇ??

こんにちは
VBAでIEの処理についておしえてください。
添付ファイルを参照ください。

オブジェクトの取得に失敗する為、上記ループにて
対応しようと考えていたのですが、
オブジェクト変数abの中見が変数なしにも関わらず
下記ループを抜けてしまっているんですが、
原因とかわかるかたいらっしゃいましたら
おしえてくださいませ。

Do while ab Is nothing
on Error Resume next
set ab=objie.document.getelementsbytagname("a")
On Error GoTo 0
Doevents
loop

Aベストアンサー

objieってどこで定義してるんでしょう?こいつが定義も初期化もされてなければ中身は不定なので、何が起きるかわかんないです。まあVBAだからまるっきりでたらめな値ってことはないと思いますけど、まともな内容とも思えません。

Q時刻文字列を判定する方法について

こんにちは
時刻文字列を比較する方法についておしえてください。

セルに時刻文字列 9:01とか12:34などが記載されていたら「OK」 
そうでない場合は「NG」となるような判定方法についておしえてください。
例)
12:34 MSGBOX ”OK”
1234  MSGBOX ”NG”
宜しくお願いいたします。

Aベストアンサー

どこかのセルに ”OK” または ”NG” と表示させたいなら…
例にある表示が、
 13:56
の書式であること【だけ】を対象としているなら、
 =IF(CELL("format",A1)="D9","GOOD","NG")
でOK。
 12:34:56
の書式なら「D9」の部分を「D8」にすればいい。

CELL関数について調べてみると幸せになれるかもしれません。

・・・
もしも入力時に ”時刻” 以外は弾きたいと言うのであれば「入力規則」で ”時刻” を指定してみましょう。
そして ”時刻” 以外の入力がされた時に返す「エラーメッセージ」を設定すれば良い。

QReDim

下記のコードを詳しく教えて
   
x2 = Range("C3:E5").Value

ReDim ans2(1 To 1, 1 To UBound(x2)) ←この部分の意味

    For i = LBound(x2, 2) To UBound(x2, 2)

      For j = LBound(x2) To UBound(x2)

       この部分の意味 → ans2(1, i) = ans2(1, i) + x2(j, i)

      Next j

    Next i

Aベストアンサー

全体として以下の様な動作をしています。
ans2(1,1) = Range("C3")~Range("C5")の合計を代入
ans2(1,2) = Range("D3")~Range("D5")の合計を代入
ans2(1,3) = Range("E3")~Range("E5")の合計を代入


> x2 = Range("C3:E5").Value

x2は、要素が行方向1~3、列方向1~3の二次元配列になります。
 x2(1,1)がC3セルの値
 x2(1,2)はD3セルの値
 …
 X2(3,3)がE5セルの値



> ReDim ans2(1 To 1, 1 To UBound(x2))

各列の合計を代入するans2は要素が行方向1~1,列方向が1~3の二次元配列の構成が必要となります。
その割り当てを行っています。



そして以下で各列の合計を計算しています。
> For i = LBound(x2, 2) To UBound(x2, 2)   '列方向の要素変化(1~3/C列~E列)
>   For j = LBound(x2) To UBound(x2)    '行方向の要素変化(1~3/3行~5行)
>     ans2(1, i) = ans2(1, i) + x2(j, i) '各列ごとに行の値を足しこむ
>   Next j
> Next i



試しに
 Range("A1:C1").Value = ans2
とすれば対応するセルに計算結果が表示されます。

全体として以下の様な動作をしています。
ans2(1,1) = Range("C3")~Range("C5")の合計を代入
ans2(1,2) = Range("D3")~Range("D5")の合計を代入
ans2(1,3) = Range("E3")~Range("E5")の合計を代入


> x2 = Range("C3:E5").Value

x2は、要素が行方向1~3、列方向1~3の二次元配列になります。
 x2(1,1)がC3セルの値
 x2(1,2)はD3セルの値
 …
 X2(3,3)がE5セルの値



> ReDim ans2(1 To 1, 1 To UBound(x2))

各列の合計を代入するans2は要素が行方向1~1,列方向が1~3の二次元配列の構成が必要となります...続きを読む

QVBA ReDim と ReDim Preserve の速度差

Public Sub Test(SourceRange As Range, TargetRange As Range)
Dim ResultArray() As Variant
' ここから

' ここまでに該当処理
TargetRange = ResultArray
End Sub

2次元配列について
ReDimで大きな配列を作って1行ずつ代入してからセルに貼り付けるのと、
ReDim Preserveで配列を1行ずつ少しづつ追加してからセルに貼り付けるのと、
5000×5000くらいだとどちらが速いですか?

私のPCだと性能不足で測定困難です。
代わりに試して頂けると助かります。

Aベストアンサー

VBA(MicrosoftのBasic)でRedimすると、配列を増減するのではなく、新たな場所に新しい大きさのメモリを確保して、配列の参照先を変えます。
今までの配列の本体は参照元が無くなるので、空いた時間に削除されます。
ReDim Preserve は、既存のデータをコピーするので、更に時間がかかります。
なので、頻繁にReDim Preserveすると、メモリの確保とデータのコピーと不要になった配列の掃除のために大忙しになるので、やめた方がいいと思います。
これは文字列の追加でも起こるので、文字列の追加も気を付けた方がいいと思います。

それとVariantはどの型になるか不明なので、1データ16バイトの大きさが必要です。
普通の変数ならあまり気にする必要はありませんが、大きな配列だと、不要にメモリを消費します。
ReDim Preserveも要素数が同じでも他の型の変数と違って、大きなメモリのなるので時間がかかる可能性が高くなります。
例えばIntegerなら2バイトなので、必要なメモリは1/8になり、速度も上がります。

ただし、今のExcelは32ビットで動いているのでLongの場合メモリは1データ4バイト必要ですが、全体の処理は速いかもしれません。

とりあえず、Redimは出来るだけしない方がいいと思います。
ReDim Preserveは更に時間がかかります。

VBA(MicrosoftのBasic)でRedimすると、配列を増減するのではなく、新たな場所に新しい大きさのメモリを確保して、配列の参照先を変えます。
今までの配列の本体は参照元が無くなるので、空いた時間に削除されます。
ReDim Preserve は、既存のデータをコピーするので、更に時間がかかります。
なので、頻繁にReDim Preserveすると、メモリの確保とデータのコピーと不要になった配列の掃除のために大忙しになるので、やめた方がいいと思います。
これは文字列の追加でも起こるので、文字列の追加も気を付けた方がい...続きを読む

Q何故このようなプログラムだとエクセルに書き込めないのか教えてください。

何故このようなプログラムだとエクセルに書き込めないのか教えてください。

Aベストアンサー

私もPythonは研究を始めたばかりですが、まさかopenpyxlとかのExcel操作ライブラリがインストールされてないなんてオチはないですよね?

あとsheet1.write(str… ってなってますが、ここはセル番地の指定だからstrでは文字列になっちゃうのでまずいと思います。変数countは数値なんだから、そのまま sheet1.write(count, 0 ,str(inputvale)) でいけるのでは?

Q続 こっちもするーしちゃったよぉ

こんばんは

先ほどと同様な質問かもしれませんが、

yahooからオークションサイトをクリックするというものですが
そのなかの処理でオークションリンククリック後 While doc.getelementsbytagname("body").Length <= 0でBODYのレングスが1になるまでループさせるというものですが、
ウオッチウインドウには変数なしでendsub 終了しました。

ただし、①の場所に(wait) 
Application.Wait [Now() + "0:00:01.9"]をつけ再度実行すると
正しく処理されるようになりました。(変数なし→値が入っている)

これは、doc.Links(i).Click後処理が早くてdocumnetオブジェクトが作られていないから
なのでしょうか?


Sub ie_test()

Dim objIE As Object 'IEオブジェクト参照用
'
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "http://www.yahoo.co.jp"

Do While objIE.busy = True Or objIE.ReadyState < READYSTATE_COMPLETE '表示完了待ち

DoEvents

Loop

While objIE.document.ReadyState <> "complete"

Debug.Print objIE.document.ReadyState&; "naka1"

DoEvents

Wend

Dim doc As Object
Set doc = objIE.document

For i = 0 To doc.Links.Length - 1
If doc.Links(i).innertext = "ヤフオク!" Then

doc.Links(i).Click
'Application.Wait [Now() + "0:00:01.9"] '①これをいれるとうまくいく
While doc.getelementsbytagname("body").Length <= 0
Debug.Print objIE.busy
Wend
Exit For
End If
Next

End Sub

こんばんは

先ほどと同様な質問かもしれませんが、

yahooからオークションサイトをクリックするというものですが
そのなかの処理でオークションリンククリック後 While doc.getelementsbytagname("body").Length <= 0でBODYのレングスが1になるまでループさせるというものですが、
ウオッチウインドウには変数なしでendsub 終了しました。

ただし、①の場所に(wait) 
Application.Wait [Now() + "0:00:01.9"]をつけ再度実行すると
正しく処理されるようになりました。(変数なし→値が入ってい...続きを読む

Aベストアンサー

こんばんは。
>これは、doc.Links(i).Click後処理が早くてdocumnetオブジェクトが作られていないからなのでしょうか?

あまり関係ないようです。Clickしたらおそらくステージが変わるのです。
裏技というか、IEイベントにして、変化する場所を監視して、変化した瞬間に次の動作に移る方法もあるのですが、おなじみの
 Do While objIE.Busy Or objIE.ReadyState <> 4: DoEvents: Loop
を一つ入れるだけで劇的に変わるはずです。

具体的には、こんな感じです。実際に動かしていませんから、正確にできるかはこの場では確かめられません。

Dim doc As Object
Set doc = objIE.Document

For i = 0 To doc.Links.Length - 1
 If doc.Links(i).innerText = "ヤフオク!" Then
  doc.Links(i).Click ←リンク先だったら、URLを取って、.Navigate2 URLでもよい

  Do While objIE.Busy Or objIE.ReadyState <> 4: DoEvents: Loop
  '(このように1行にまとめたほうが見やすいです。)
'画面の切り替わりを待ちます。
  'そして、必要に応じて、
  Set doc =objIE.Document を改めて取得しなおします。 <=これを活かすには、ループを抜けるしかありません。
''以下の場合のdoc は、一度しか取っていないので、何回やっても、変わらないです。
'× While doc.getelementsbytagname("body").Length <= 0
  Exit for
  Loop
End If
Next

こんばんは。
>これは、doc.Links(i).Click後処理が早くてdocumnetオブジェクトが作られていないからなのでしょうか?

あまり関係ないようです。Clickしたらおそらくステージが変わるのです。
裏技というか、IEイベントにして、変化する場所を監視して、変化した瞬間に次の動作に移る方法もあるのですが、おなじみの
 Do While objIE.Busy Or objIE.ReadyState <> 4: DoEvents: Loop
を一つ入れるだけで劇的に変わるはずです。

具体的には、こんな感じです。実際に動かしていませんから、正確にできるかはこの...続きを読む

Q特殊な演算

2進数で表記された2つの数字を以下の演算で別の値を出す方法を考えています

その演算は同桁の数字が0と0なら0を
1と0,0と1なら1を
1,1も1
です。

010 と011 なら
1桁目が0、1なので1
2桁目は1,1なので1
3桁目は0,0なので0
となり 011 を返す


同桁の数字が0と0なら0を
1と0,0と1も0を
1,1は1
というバージョンも考えるのですが

エクセルでこのような演算を考えるには
関数であれVBAであれ
まず文字列としてleft() とか right() mid()を使って同桁の数字を取り出し
それを数値に直して計算し、3桁目*4+2桁*2+1桁 をして2進数表記にすればいいでしょうか?

それよりもっと楽なやり方はあるでしょうか?

お願いいたします

Aベストアンサー

使ってるExcelが2013かそれより新しければ、ビット演算関数があるので一発です。それより古いバージョンではVBAを使うか、1桁ごとに分解して演算するしかないですが。

QExcelで「令和」と表示されるのは5月1日にならないとだめですか?

「日本の新元号に関する Office の更新プログラム」というページ(下記)で、
「Windows と Office の更新プログラムを適用済みの場合でも、Windows 上で実行されている Office 製品は 2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しませんのでご注意ください。」
と書かれています。
https://support.microsoft.com/ja-jp/help/4478844/office-updates-for-new-japanese-era

今月4月中に、Excelのセルに来月5月以降の年月日を入力した場合に、自動で「令和」という元号を表示させることはできないのでしょうか。

もし、できるということであれば、「2019 年 5 月 1 日に新元号が開始されるまで、新元号を表示しません」とはどのような意味なのでしょうか。

Aベストアンサー

>こちらでは、「4月17日以降にOfficeも更新されれば「令和元年」と表示されると思います」と書かれているんですが

その方は、Microsoftの方ではないですし個人の予想ですよね?公式が出ているのにそれを持ち出してどうするんですか?

5/1より前に新しい元号を表示したい場合は数式や表示形式で限定的に表示させる方法を色々な方が考え付いていますよ。
検索すればたくさん出てきます。

Qこのプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたの

このプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたのですが、よろしければ教えてください

Aベストアンサー

No.1です、
念のための追加です。

日本語で「〇〇の値が××だったら、、、。そうでなかったら~。」といった表現で書かれたものが多くのプログラミング言語ではifを用いた処理になります。
同じく「〇〇の値が××になるまで、、、を繰り返す。」といった表現で書かれたものfor文やwhile文を用いた処理になります。

参考まで。


人気Q&Aランキング