忙しい現代人の腰&肩のお悩み対策!

2値化した画像の黒い部分のピクセル数をカウントするプログラムを組みたいのですが、どのように組めば良いのかわかりません…。
どなたかわかるかたソースコードと一緒におしえていただけないでしょうか?
環境はVB6.0です。
回答よろしくお願いします。

A 回答 (1件)

    • good
    • 0

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

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

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

Q此れ、例によって、MSのミスですか?

添付図上段は、Excel 2013 のヘルプ[CELL 関数]からの抜粋です。
見づらければ、次の URL を参照してください。
http://support.office.com/ja-jp/article/cell-%E9%96%A2%E6%95%B0-51bd39a5-f338-4dbe-a33f-955d67c2b2cf

添付図下段は私が検証した結果を示しています。
標準書式のA列の全セルには 2018/5/3 を入力しています。
A列の各セルに対して同行のB列に示す書式(format)を設定すると、A列は添付図に示す表示になります。
式 =CELL("format",A2) を入力して、此れを下方にズズーッとオートフィルした結果(戻り値)をC列に示しています。

赤地に白抜きした部分がヘルプと齟齬していますよね。
特に戻り値 D5 は何処にも登場しません。(どのようにすれば D5 が得られるのだろう?)

此れらの食い違いは、一体全体どういうことなのか教えてください。

Aベストアンサー

こんばんは。
>「ローカルバージョン」とは日本語で書けば“日本語版”という僅か4文字で済むことでしょ?
>>日本独特とは言わないまでも、アメリカのものとは違うということです。
と書きましたとおり、昔ならともかく、本当に「日本語」版というのが存在するならばです。

いずれにしても、ローカル・バージョンは、オリジナル・バージョンに対する意味です。私たちの使っているものが、厳密に日本語版とは言えないからなのです。それは、内部的に、特に韓国語バージョンは共有する部分が多いので、メニュー表示だけの違いだったという記憶があります。東アジアバージョンは、そう変わらないのではないでしょうか。

それに反して、「フランス語」や「ドイツ語」バージョンしか知りませんが、ヨーロッパの言語に関しては、その国の言語のバージョンは、私たちが使っているものとは大きく違うのではないかと思うのです。関数名自体が違います。そして、このアジア向けでは、Microsoft Office で、一度、問題が発生したことがあるのです。アジア向け(日本だけではない)に、一部の機能を抜いた製品を出荷したことがあるのです。そうしたら、ユーザー側で大変なクレームがついたのです。

>ご承知とは思いますが、私がたまに利用する
>http://answers.microsoft.com/ja-jp
>に投稿しても「そんなことは、Microsoft に問い合わせたら」と言われたことがあります。

これが、英語版でも同じような対応なのです。そもそも、回答者に肩書などいらないと思うのです。それで、最近は、Stack OverFlow サイトを読むことが多いのですが、ここでも解決はしませんね。今は、エクセル・ユーザーでも、一部はかなり上のステージに移ってしまいました。
今度、Excel 2019 では、Python が加わるとも聞きますが、どこまでやれるか分かりません。

問い合わせ先なのですが、間違っていたら申し訳ないのですが、ここのHelp画面の下にメールの送信マークがあります。ヘルプからだと、そこしか思いつきませんでした。

https://support.office.com/ja-jp/article/cell-%E9%96%A2%E6%95%B0-51bd39a5-f338-4dbe-a33f-955d67c2b2cf

No.3さんの
>セルに独自の表示形式が設定されている場合は、セルの表示形式を表すコードが返されます。
#2のマクロ関数の GET.CELL(7, セル)だったら出せるけれども、CELL関数では無理なのではないでしょうか。

こんばんは。
>「ローカルバージョン」とは日本語で書けば“日本語版”という僅か4文字で済むことでしょ?
>>日本独特とは言わないまでも、アメリカのものとは違うということです。
と書きましたとおり、昔ならともかく、本当に「日本語」版というのが存在するならばです。

いずれにしても、ローカル・バージョンは、オリジナル・バージョンに対する意味です。私たちの使っているものが、厳密に日本語版とは言えないからなのです。それは、内部的に、特に韓国語バージョンは共有する部分が多いので、メニュー表示...続きを読む

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...続きを読む

QC言語、関数を用いたプログラムがうまくいきません。

C言語で、以下の漸化式について
T(0)=1
T(1)=X             のとき

T(k+1)=2XT(k)-T(k-1)    (k = 0,1,2...,20)
を、kを20以下の自分の好きな値を入力して、計算を回して出力するプログラムを以前作りました。


以下にプログラムの内容と結果を書きます。
#include <stdio.h>
#include <math.h>

int main()
{
double x ;
int k ;
int K ;
double T[20] ;

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

T[0] = 1 ;
T[1] = x ;

for (k = 1; k < K; k++) {
T[k+1] = 2 * x * T[k] - T[k - 1];
}

for (k = 0; k <= K; k++) {
printf("T[%2d] = %f\n",k,T[k]);
}
return 0 ;
}

//結果//
k = 5
x = 2
T[ 0] = 1.000000
T[ 1] = 2.000000
T[ 2] = 7.000000
T[ 3] = 26.000000
T[ 4] = 97.000000
T[ 5] = 362.000000

k = 4
x = 3
T[ 0] = 1.000000
T[ 1] = 3.000000
T[ 2] = 17.000000
T[ 3] = 99.000000
T[ 4] = 577.000000


今回は上記のプログラムを、関数を使って作りました。
以下にプログラムの内容と結果を書きます。


#include <stdio.h>
#include <math.h>

double t[20];

double T(double x, int k)
{
if (k = 0)
{
return 1 ;
}

if (k = 1)
{
return x ;
}

else
{
return 2 * x * t[k] - t[k - 1];
}

}

int main()
{
double x ;
int k, K ;
double t[20];

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

for (k = 0; k <= K; k++)
{
printf("T[%2d] = %lf\n",k,T(x,k));
}
return 0;
}


//結果//
k = 5
x = 2
T[ 0] = 2.000000
T[ 1] = 2.000000
T[ 2] = 2.000000
T[ 3] = 2.000000
T[ 4] = 2.000000
T[ 5] = 2.000000

k = 4
x = 3
T[ 0] = 3.000000
T[ 1] = 3.000000
T[ 2] = 3.000000
T[ 3] = 3.000000
T[ 4] = 3.000000


このように、計算がうまくいきません。
何を直せばうまくいくかなど教えていただけると嬉しいです。
また、C言語、プログラミング初心者なので、わかりやすく丁寧に教えていただけると助かります。
よろしくお願いします。

C言語で、以下の漸化式について
T(0)=1
T(1)=X             のとき

T(k+1)=2XT(k)-T(k-1)    (k = 0,1,2...,20)
を、kを20以下の自分の好きな値を入力して、計算を回して出力するプログラムを以前作りました。


以下にプログラムの内容と結果を書きます。
#include <stdio.h>
#include <math.h>

int main()
{
double x ;
int k ;
int K ;
double T[20] ;

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

T[0] = 1 ;
...続きを読む

Aベストアンサー

C言語における比較演算子は"=="
"="は代入演算子。
if文の()の中が全て"="になっていますね。これを全て"=="に変えましょう。

if(k=0)
はkに0を代入。そしてその代入した値がその式の値として評価されます。
つまり、k=0は偽として処理される。(C言語において式の値が"0"=偽)
kの値はこの時点で"0"になっている。

if(k=1)
kに1が代入される。そしてその式の値は"1"であり真(C言語において式の値が"0"以外=真)
真であるため、ifの後の{}中の式が実行される。return文なのでここでこの関数は終了される。
要するにxの値がそのまま出力される。
当然それ以下の式は実行されない。

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

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

Aベストアンサー

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

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

参考まで。

Q飛行機の形について。

次のURL 先の写真で、飛行機の雲はちょうどいいのですが、明るさがあかすぎるような気がするのです。暗くすると、雲が見えますし。どうすれば良いのでしょうか?教えていただけると幸いです。
https://oshiete.goo.ne.jp/qa/10847864.html

Aベストアンサー

> 明るさを数%下げるというのは、-5%くらいのこと
で対応できると思ったのですが、それでも気に入らないのなら、
雲の色に若干の影響があるかもしれませが。-10%以上にしても
良いと思いますよ。

元の色が違うのだから、そこまでこだわる必要はないと思う。
表の塗りつぶしの色も同じにしていませんしね。

この回答をもって、この質問への回答はしません。
では、(ーー)/~~~

Qoffice2013 ExcelのPersonal.xlsの不具合

別のパソコンで作成したエクセルのVBAを別のパソコンにコピーして使っています。
作成元のパソコンで改廃を行ったので、いつものように別のパソコンにPersonal.XLSごと上書きコピーしました。
しかし、エクセルのリボンに設定したボタンを押してもマクロか起動しません。
デスクトップに置いてPersonal.xlsをエクセルにドラッグし、開発タブからVBAに入り、該当のプログラムを手動で起動したら動作してくれました。

終了して再度エクセルを起動してみたところ、VBAの中身は空っぽになっていました。

officeの修復(オンライン修復)を行いましたが解決せず、どうしたらいいでしょうか?

別のパソコンでは、Personal.xlsのコピーのみで動作します。

Aベストアンサー

こんばんは。

ふつう、個人用マクロブックは、PERSONAL.XLSB なのですが……。(拡張子に注目)
PERSONAL.XLSB は、UACは関係ありません。

場所は以下に入っているとして、
c:\USERS\[MY_ID]\AppData\Roaming\Microsoft\Excel\XLSTART\
私は、オプションのセキュリティーセンターで、[信頼できる場所]に、上記フォルダーを入れています。

>作成元のパソコンで改廃を行ったので、いつものように別のパソコンにPersonal.XLSごと上書きコピーしました。

もしかして、そのままファイルをフォルダーに入れたということでしょうか?
PERSONAL.XLSBの流用はやめたほうがよいです。トラブル発生のもとになりますから、マクロはテキストベースで一つずつ、移し替えるべきです。

Q苦しんで覚えるc言語について

<今、配列型引数というページを見ているのですが>
まずこちらのプログラムを見てください
#include<stdio.h>
int getaverage (int data[10]);
int main (void)
{
int average,array[10]={15,78,98,85,17,35,42,15}
average=getaverage(array);
printf("%d\n",average);
return 0;
}
int getaverage(int data[]);
{
int i,average=0;
for(i=0;i<10;i++)
{
average+=data[i];
}
return average/10;
}
このプログラムで気になったところはaverage=getaverage(array);
という部分です
何処が気になったのかというと、=の部分です。
このホームページの変数への値の代入というタイトルのページで、
変数に数値を代入するには次の書き方があると書いてあり、
変数名=数値;
=には右の数値を左の数値に記憶させるとあり、
数学の等号とは違うともあります。

左の変数averageに右のgetaverage(array)渡したとして、なんで呼び出された関数が
記憶させたaverageではなくgetaverageになったのかよく分かりません

この苦しんで覚えるは読み進めると疑問が解消されることもあったので
読み進めていたのですが、あまり納得できるような答えがホームページに
ないので教えてください。

<今、配列型引数というページを見ているのですが>
まずこちらのプログラムを見てください
#include<stdio.h>
int getaverage (int data[10]);
int main (void)
{
int average,array[10]={15,78,98,85,17,35,42,15}
average=getaverage(array);
printf("%d\n",average);
return 0;
}
int getaverage(int data[]);
{
int i,average=0;
for(i=0;i<10;i++)
{
average+=data[i];
}
return average/10;
}
このプログラムで気になったと...続きを読む

Aベストアンサー

average=getaverage(array);

とすると、averageには関数getaverage()の戻り値が代入されます。
関数getaverage()の型はint。なので変数averageはint型で定義しています。

で、関数getaverage()の最後に、、、

return average/10;

、、、とありますので、関数getaverage()の戻り値は同関数内で宣言&使用するint型変数averageに最後に入っていた値の10分の1です。
参考まで。

QVBAでこんなことはできますか?

日経先物をしているのですが、エクセルに株価や指数などを入れるためRSSで取り入れていたのですが

拾えない指数が多数でてきたので、調べているうちにVBAという言葉をしりました。

質問
VBAでJPXというサイトから売買代金の数字を自動取得したり

Investing.comというサイトから、VIX指数や

銅などの指数をリアルタイムで自動取得できるものなのでしょうか?

ググってもヤフーファイナンスばかりのワードが出てきて他サイトからもできるものなのか

流れだけ教えていただけないでしょうか?

JPX
https://www.jpx.co.jp/markets/equities/summary/index.html

investing.com
https://jp.investing.com/

Aベストアンサー

一通りできますよ。
https://vba-code.net/ie/

ウェブサイトの仕様って変わるから、変わるたびにこっちも修正しないといけないって問題がありますが。

Q今エクセルマクロを作っていて、いいところまではいってるんですが完成には至らなくて困っています。すでに

今エクセルマクロを作っていて、いいところまではいってるんですが完成には至らなくて困っています。すでにシート1のA1からA40のところまで40番までの人の番号と、B1からB40のところまで名前と、C3からAF40のところまで1日から31日までの出席情報がかかれています。(出席なら◯、欠席なら×、遅刻なら△です)。そしてシート上につくった出席というボタンを押すと何番ですか?とインプットボックスが出てきて例えば1と入力したら番号が1の人の出席数だけがカウントされて、出席数は◯◯ですというメッセージが出てくるようにしたいです。どのようにプログラムを設計したらいいんでしょうか?

Aベストアンサー

こんばんは。

学生さんですか?高校生ぐらいでしょうか?入門編で、このぐらいのマクロの問題ができるのは、クラスで1人か2人で、たぶん経験者です。練習用としては、ワークシートの関数はなるべく使わないようにします。

>いいところまではいってるんですが完成には至らなく
うまくいかないのは、間違えているわけで、それがクリアしないと学校では、50点を貰えるかもしれませんが、仕事や掲示板の回答者では、0点であるということです。私は、何度も悔しい思いをしました。VBAプログラミングは完成して初めてマクロと呼びます。

このレベルでも、ヒントが出ていないと、たぶん出来ないのではないかと思います。
仮のサンプル表の画像を貼り付けましたから、それをみてください。

'//
Sub BUTTON1_Click()
 Dim d As Date
 Dim num As Variant
 Dim i As Long
 Dim j As Long
 Dim cnt As Long
 d = Range("C1").Value  '日付の始まり
 cnt =0
'エラー処理
 If Day(d) <> 1 Then MsgBox "表が正しくありません。", vbExclamation: Exit Sub
 num = Application.InputBox("何番ですか?", "出席番号")
 If num = False Then Exit Sub
 If WorksheetFunction.CountIf(Range("A3:A40"), num) = 0 Then
  MsgBox "出席番号は見つかりません。", vbExclamation: Exit Sub
 End If
'---------実際のコード---------
 For i = 1 To 40
  If Val(num) = Trim(Cells(i + 2, 1).Value) Then
   For j = 1 To Day(DateSerial(Year(d), Month(d) - 1, 0))  '月末まで
    If Cells(i + 2, j + 2).Value Like "○*" Then
     cnt = cnt + 1
    End If
   Next j
   Exit For
  End If
 Next i
 MsgBox Cells(i + 2, 1).Value & "番:" & Cells(i + 2, 2).Value & " さんの出席数は" & vbCrLf & _
  cnt & "日 です。"
End Sub

こんばんは。

学生さんですか?高校生ぐらいでしょうか?入門編で、このぐらいのマクロの問題ができるのは、クラスで1人か2人で、たぶん経験者です。練習用としては、ワークシートの関数はなるべく使わないようにします。

>いいところまではいってるんですが完成には至らなく
うまくいかないのは、間違えているわけで、それがクリアしないと学校では、50点を貰えるかもしれませんが、仕事や掲示板の回答者では、0点であるということです。私は、何度も悔しい思いをしました。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関数について調べてみると幸せになれるかもしれません。

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


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング