再びお世話になります。
VB2005で表題の件ご教授願います。
作成した表でカラムスヘッダーをクリックすることによりソートは可能状態です。しかし、数値データを表示させていていて昇順、降順とも文字列としの結果で数値の大小でソートされません。
プロパティでColumnsからCellStyleビルダのFormatを数字に選択しても結果はかわりません。
以上よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは


以下のURLを参考にしてみたらどうでしょうか。
この中の「SortCompareイベントを使用する方法」
のソースを以下のように改造すれば数値の大小でSort可能です。
Private Sub DataGridView1_SortCompare(ByVal sender As Object, _
ByVal e As DataGridViewSortCompareEventArgs) _
Handles DataGridView1.SortCompare
 e.SortResult = Val(e.CellValue1) - Val(e.CellValue2)
 e.Handled = True
End Sub
入力データなどのチェックはしていませんので留意してください。

参考URL:http://dobon.net/vb/dotnet/datagridview/customso …
    • good
    • 0
この回答へのお礼

ほんとに有難うございました。
車の運転ならもみじマークもそれなりの年季を評価できるのでしょうが、VBのもみじマークの自分にご親切にお教えいただきほんとに有難いことです。そのまま貼り付けましたら一発で動作、完璧でした。

お礼日時:2007/05/24 20:39

このQ&Aに関連する人気のQ&A

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

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

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

Q密度関数値f(y)から分布関数値F(y)を求めたい

密度関数値f(y)から分布関数値F(y)を求めたいのですが、わかりません。


f(y)=0.0104
になりました。

これから、
F(y)を求めたいのですが、ネットで調べてもどうも分かりません。

もしかして、f(y)=0.0104がおかしいのでしょうか?


どなたか教えてください><

Aベストアンサー

>f(y)=0.0104がおかしいのでしょうか?
その通りです。
密度関数の性質
∫(-∞→∞) f(y)dy=1
を満たさなくてはいけません。

f(y)=0.0104 だと
∫(-∞→∞) f(y)dy=∞
となって密度関数の性質を満たしませんね。

なお、分布関数F(y)と密度関数f(y)の間には
F(y)=∫(-∞→y)f(t)dt, F(∞)=1
という関係にあります。

Q降順・昇順のやり方(初心者)

現在VB2005を学んでいます。

2次元配列(要素数:10,10)で、それぞれに数字の値を入れておき、特定の列に対して降順・昇順処理をしたいと思っています。そしてそれに合わせて全体の行も入れ替えるようにします。

本当は、構造体配列等でDataGridを使って処理すれば簡単にいくのでしょうが、敢えてそれを2次元配列を使って、並び替えたものをTextBoxに表示したいのですが、中々上手くいきません。

取りあえず、配列の特定の列の値を降順・昇順に並び替えて表示させるという処理だけでも分かるといいのですが、何か良い方法はないでしょうか?

Aベストアンサー

降順,昇順にする方法はたくさんあります。

http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%83%88
を参考にしてください。

数が10くらいだったら,その方法でも対して速度に差がでないので,
上のリンクにあるバブルソートがコーディングが簡単だと思います。

QEXCELでA列記載の数値に対応するB~F列のデータをG列に返すには?

A1からA10のセルに列順を示す1から5までの数値がランダムに入っています。
B1からF10までのセルにデータ(文字列または数値)が入っています。
B列を1列目、以下C~F列を2~5列目として、G列にA列の数値に対応する列のデータを返したいのですが、数式を忘れてしまい困っています。初歩的なな質問で恐縮ですが至急どなたかご教示ください。
例えば下表のとおりA1の数値が1のときはB1を、4の時はE1をというようにです。

列順(1)  (2) (3) (4) (5) 
A  B   C   D   E   F  G
1 山田 田中 斉藤 鈴木 佐藤 山田
4 池田 木戸 松尾 山口 近藤 山口
5  …  …  …  …  …
2  …  …  …  …  …

Aベストアンサー

H1:=INDEX(B1:G1,,A1)
以下コピーということでしょうか

QVB2005ーDataGridViewの選択されたセルの色

VB勉強中で、何度も申し訳ございません。

DataGridViewの選択されたセルの色がノーマルでは、「点線囲いの青色」になっていますが、ちょっと邪魔なので、透明もしくは、表示させないようにすることってできますか。
DataGridView1.ForeColor = Color.Empty だと無反応
DataGridView1.ClearSelection() だと「点線囲い」だけが残ります。

ご教授願います。よろしくお願いいたします。

Aベストアンサー

背景はデザイン時かモジュールで
DataGridView1.DefaultCellStyle.SelectionBackColor = Color.White
とかで変更できるようです。

点線に関しては、
http://dobon.net/vb/dotnet/datagridview/noforusframe.html
というのがありました。

Qf(x)=0の近次解を求める数値計算について 

方程式 f(x)=0 
の近次解を求める数値計算に関する質問です。

代表的な計算方法には二分法、はさみうち法、ニュートン法、逐次代入法
などがあるようですが、

f(x)が以下のような関数であるときどのように近似解を求めたらよいでしょうか?

(1)  f(x)はどのxに対しても常にf(x)≧0となるような関数
(2)  f(x)=0 となるxはただ一つだけである
(2)  f(x)は非常に複雑な関数でf(x)を微分するのは困難

趣味で行っている3Dのモデリングに関するプログラム中に必要になった関数で、
このような関数に対し、二分法をベースにしたプログラムをつくってみましたが、
非常にだらだらとしたアルゴリズムでなっとくできません。
この関数に適したよいを御存知の方おられましたら御回答くださいませ。


またもしf(x)が 

(4)  f(x)= |2x+3| のように f(x)が0になるまでは単調減少で、0になってからは単調増加である

という条件がさらに加わった場合どうなるかについてもご解答いただけると助かります。

方程式 f(x)=0 
の近次解を求める数値計算に関する質問です。

代表的な計算方法には二分法、はさみうち法、ニュートン法、逐次代入法
などがあるようですが、

f(x)が以下のような関数であるときどのように近似解を求めたらよいでしょうか?

(1)  f(x)はどのxに対しても常にf(x)≧0となるような関数
(2)  f(x)=0 となるxはただ一つだけである
(2)  f(x)は非常に複雑な関数でf(x)を微分するのは困難

趣味で行っている3Dのモデリングに関するプログラム中に必要になった関数で、
このような...続きを読む

Aベストアンサー

>二分法をベースにしたプログラムをつくってみましたが、
>非常にだらだらとしたアルゴリズムでなっとくできません。
もし、それが極小値を求めるように二分法を改造したのであれば、
その方法で合っています。
少しでも計算時間を稼ぎたいなら、分割方法を工夫します。
「黄金分割法」を使います。
http://www.sra.co.jp/people/miyata/algorithm/goldsect.txt
※極小(大)値を求めるアルゴリズムで、f(x)が単峰性という以外には制約が無い。

ちなみに、
二分法、はさみうち法:X=A、X=Bで、F(X)の正負が入れ替わるように区間を
  設定する必要があるため、この方法は使えない。
ニュートン法:f(x)の微分が判らない場合、f'(x)=(f(x+dx)-f(x))/dx
  で無理やり計算できるから、ニュートン法が使えないわけではない。
  ただし、f(x)=0付近において、f'(x)もゼロに近いから、運が悪いと発散して解が求まらない場合があります。
逐次代入法:逐次代入法も、発散と隣り合わせです。
 ※ニュートン法も逐次代入法の一種。

>(4)  f(x)= |2x+3| のように f(x)が0になるまでは単調減少で、0になってからは単調増加である
(1)と(2)が成立すれば、必ず(4)が成立するのだけど....
この関数でやっかいな点は、微分が連続関数となっているかどうか。
微分が連続関数:極小値の位置で微分もゼロ。 したがって、f(x)をじかに求める場合、ニュートン法や逐次代入法では発散するかも。
ただし、微分のかわりに差分を使って、差分=0のxを求める方法はok。
微分が極小値の位置で不連続:差分=0となるxを求める方法がうまくいかない可能性がある。(2分法ならば無理やりですが解は求まる。)

それやこれやで、発散しないで解にたどり着ける可能性が高い方法は2つ。(計算速度を犠牲にします。)
1つはf(x)を直接使い、黄金分割法。
もう1つは、微分のかわりに差分を使い、2分法を用いて差分=0となるxを求める。
黄金分割法のほうが計算時間は短かそうです。

>二分法をベースにしたプログラムをつくってみましたが、
>非常にだらだらとしたアルゴリズムでなっとくできません。
もし、それが極小値を求めるように二分法を改造したのであれば、
その方法で合っています。
少しでも計算時間を稼ぎたいなら、分割方法を工夫します。
「黄金分割法」を使います。
http://www.sra.co.jp/people/miyata/algorithm/goldsect.txt
※極小(大)値を求めるアルゴリズムで、f(x)が単峰性という以外には制約が無い。

ちなみに、
二分法、はさみうち法:X=A、X=B...続きを読む

QVB2005 符号を踏まえた降順ソートについて

いつもお世話になっております。
私はVB2005入門者です。

hoge.txtからカンマ0列目に"ABCD"且つ1行目に"T"がつく行の2,3,4列目を
nfMov_x(),nfMov_y(),nfMov_z()に格納しソートを使って
配列内の数値を降順に並び替えて、最大値を求めたいのですが
絶対値に置き換え符号を無視した処理しか出来ませんでした。


----hoge.txt----

ABCD,A1,10.5 ,8.3 , 9.5
ABCD,A2,11.5 ,7.3 , 6.5
ABCD,T1,42.5 ,-10.3 , 3.2
ABCD,T2,25.2 ,-220.2 , -1.2
ABCD,T3,-35.5 ,210.3 , -15.2

----------------

希望する取得値は下記の通りで、T3列210.3ではなくT2列-220.2のように
ソート時、符号は無視するが最終的には符号を付けた数値を取得したいのです。

Tmov_x(0) = 42.5
Tmov_y(0) = -220.2
Tmov_z(0) = -15.2


下記をどのように変更すれば良いのかわからないので、どなたか
アドバイスや添削をよろしくお願いします。


For n = 0 To 2
Dim reader As New System.IO.StreamReader("C:\hoge.txt", System.Text.Encoding.Default)
Dim nfMov_x(), nfMov_y(), nfMov_z() As Single
Do Until reader.EndOfStream
line = reader.ReadLine()
field = line.Split(",")
If field(0) = "ABCD" Then
If field(1).Trim.Substring(0, 1) = "T" Then
Do While field(4).Trim.Substring(0, 1) = "T"
ReDim Preserve nfMov_x(T_cont), nfMov_y(T_cont), nfMov_z(T_cont)
nfMov_x(T_cont) = field(2)
nfMov_x(T_cont) = Math.Abs(nfMov_x(T_cont))

nfMov_y(T_cont) = field(3)
nfMov_y(T_cont) = Math.Abs(nfMov_y(T_cont))

nfMov_z(T_cont) = field(4)
nfMov_z(T_cont) = Math.Abs(nfMov_z(T_cont))

T_cont += 1
line = reader.ReadLine()
field = line.Split(",")
Loop
ReDim Preserve nfMov_x(T_cont - 1), nfMov_y(T_cont - 1), nfMov_z(T_cont - 1), _
Tmov_x(cont), Tmov_y(cont), Tmov_z(cont)
Array.Sort(nfMov_x)
Array.Sort(nfMov_y)
Array.Sort(nfMov_z)
Array.Reverse(nfMov_x)
Array.Reverse(nfMov_y)
Array.Reverse(nfMov_z)
Tmov_x(cont) = nfMov_x(0)
Tmov_y(cont) = nfMov_y(0)
Tmov_z(cont) = nfMov_z(0)
cont += 1
T_cont = 0
ReDim nfMov_x(T_cont), nfMov_y(T_cont), nfMov_z(T_cont)
Exit Do
End If
End If
Loop
reader.Close()
Next

いつもお世話になっております。
私はVB2005入門者です。

hoge.txtからカンマ0列目に"ABCD"且つ1行目に"T"がつく行の2,3,4列目を
nfMov_x(),nfMov_y(),nfMov_z()に格納しソートを使って
配列内の数値を降順に並び替えて、最大値を求めたいのですが
絶対値に置き換え符号を無視した処理しか出来ませんでした。


----hoge.txt----

ABCD,A1,10.5 ,8.3 , 9.5
ABCD,A2,11.5 ,7.3 , 6.5
ABCD,T1,42.5 ,-10.3 , 3.2
ABCD,T2,25.2 ,-220.2 , -1.2
ABCD,T3,-35.5 ,210.3 , -15.2

----------------

...続きを読む

Aベストアンサー

比較用の IComparerを実装したクラスを使えば符号を無視したソートが出来ますよ

Public Class myComp
  Implements IComparer
  public Funcrion Compare( byVal x as Object, byVal y as Object) As Integer _
    Implements System.Collections.IComparer.Compare
    dim dx, dy as double
    dx = Math.Abs( CType(x,Double) )
    dy = Math.Abs( CType(y,Double) )
    Return dx - dy
  End Function
End Class
といった具合に定義しておきます

テキストファイルから変うすに読み込む際には Math.Absを使わず
nfMov_x(T_cont) = field(2)
nfMov_y(T_cont) = field(3)
nfMov_z(T_cont) = field(4)
そのまま代入します

ソートをする際に
dim oComp as new myComp
Array.Sort(nfMov_x, oComp )
Array.Sort(nfMov_y, oComp )
Array.Sort(nfMov_z, oComp )

Array.Reverse( fnMov_x )
Array.Reverse( fnMov_y )
Array.Reverse( fnMov_z )
といった具合でしょう

なおmyComp.Compareの Return文の引数を dxとdyを入れ替えれば降順のソートも出来ます

比較用の IComparerを実装したクラスを使えば符号を無視したソートが出来ますよ

Public Class myComp
  Implements IComparer
  public Funcrion Compare( byVal x as Object, byVal y as Object) As Integer _
    Implements System.Collections.IComparer.Compare
    dim dx, dy as double
    dx = Math.Abs( CType(x,Double) )
    dy = Math.Abs( CType(y,Double) )
    Return dx - dy
  End Function
End Class
といった具合に定義しておきます

テキストファ...続きを読む

Q関数 ~に最も近く~よりも高い数値

関数苦手です。宜しくお願いします。
セルA1からF5まで適当な数値が入っており、B1からF5までの中でセルA1に最も近く、A1よりも高い数値を選ばせたいです。同様なA1に最も近く、A1よりも低い数値を選ぶ式をお願いします。

Aベストアンサー

Excelの基本の1つでしょうか。
Office検定みたいなやつの Excelエキスパートでも出題されます。
配列数式を使うことで実現できます。


>セルA1に最も近く、A1よりも高い数値を選ばせたいです
 数式バーに以下数式を入力し
 =MIN(IF(B1:F5>A1,B1:F5))
 Shift+Ctrl+Enter で配列数式として入力されます


>A1に最も近く、A1よりも低い数値を選ぶ式
 =MAX(IF(B1:F5<A1,B1:F5))
 を同様に配列数式として入力すればOKです。


あまりデータ数が多い場合は再計算で重くなるので
対象のセルが数百万個を超える場合はマクロ化させた方が良いかもしれません。

QVB2005 DataGridViewの全角・半角混在のカラムの並び替え

VB2005で開発、データベースはオラクル10gです。
全角・半角文字混在の項目を昇順で読み込み、DataGridViewの表に取り込みます。その後、ヘッダーカラムの並び替えを行うと順番が変わっていまいます。
具体的には
1.読み込み時は、空白は最尾、並び替え後は先頭にくる。
2.読み込み時、括弧(「[」)の半角と全角は別々に並んでいますが、並び替え後は半角と全角との区別はなく、並び替えられます。

カラムを別に設けて、コード体系を変換して、そのカラムを並び替えすればいいのでしょうか?
コード体系の知識は弱いので、お教えください。

PRIVATE SUB BUTTON_CLICK(省略)
DIM I AS INTEGER
DIM S AS STRING
FOR I = 0 TO DataGridView1.Rows.Count - 1
S = DataGridView1(1,I).VALUE
'-----ここで変換?
   DataGridView1(2,I).VALUE = S
NEXT
DataGridView1.Sort(DataGridView1.Column(2), _
System.ComponentModel.ListSortDirection.Ascending)
END SUB

よろしくお願いします。

VB2005で開発、データベースはオラクル10gです。
全角・半角文字混在の項目を昇順で読み込み、DataGridViewの表に取り込みます。その後、ヘッダーカラムの並び替えを行うと順番が変わっていまいます。
具体的には
1.読み込み時は、空白は最尾、並び替え後は先頭にくる。
2.読み込み時、括弧(「[」)の半角と全角は別々に並んでいますが、並び替え後は半角と全角との区別はなく、並び替えられます。

カラムを別に設けて、コード体系を変換して、そのカラムを並び替えすればいいのでしょうか?
コード体系...続きを読む

Aベストアンサー

VB初心者です。僭越とは存じますが、ちょっと調べてみたので書いてみます。

・読み込み時に全角括弧「」と半角括弧[]が別々ということは、
Oracleでは単純に文字コードでソートしている。
(読み込み時に空白が最後尾ということはDESCを付けているのでしょうか?)

>並び替え後は半角と全角との区別はなく、並び替えられます
・これは文字コードが原因ではなく、VBで「あいまい検索」のようなことが行われているのではないでしょうか?
「あいまい検索」とは、「a」と「A」を同一のものとして見て検索するという意味です。


DataGridView.Sort メソッド (IComparer)
http://msdn2.microsoft.com/ja-jp/library/wstxtkxs(VS.80).aspx
というメソッドがあります。

また、
Comparer クラス
http://msdn2.microsoft.com/ja-jp/library/system.collections.comparer(VS.80).aspx
というクラスがあります。

Comparer にはカルチャを関連付けるようなので、Comparer に日本-日本語カルチャが
関連付けられているために、「」と[]を同一と見ているのでは?


以下のようなコードを書いてみたのですが、myComp を Comparerクラスとして定義しているのに、
DataGridView.Sort() では IComparerを引数としてとるためうまくいきません。
myComp を IComparer として扱いたいのですが、悲しいかなVB初心者のためわかりません。


また、私は SQL Server を使用しているため、JJ-TOさんとは環境が違います。
何か問題解決の足しになれば幸いです。

==== Code ====
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If Me.DataGridView1.Columns(1).DisplayIndex = 1 Then
Me.DataGridView1.Columns(1).DisplayIndex = 2
Me.DataGridView1.Columns(2).DisplayIndex = 1
Else
Me.DataGridView1.Columns(1).DisplayIndex = 1
Me.DataGridView1.Columns(2).DisplayIndex = 2
End If
'????????????????????
'System.Globalization.CultureInfo()の引数は、
'("ja", False), ("ja", True), ("ja-jp", False), ("ja-jp", True)のどれ?
'????????????????????
Dim myComp As New System.Collections.Comparer(New System.Globalization.CultureInfo("ja", False))

'????????????????????
'myComp (as Comparer)を IComparer として扱うにはどうしたらいい?
'????????????????????
Me.DataGridView1.Sort(myComp)
Me.DataGridView1.Sort(Me.DataGridView1.Columns(1), System.ComponentModel.ListSortDirection.Ascending)
End Sub
==== end of Code ====

VB初心者です。僭越とは存じますが、ちょっと調べてみたので書いてみます。

・読み込み時に全角括弧「」と半角括弧[]が別々ということは、
Oracleでは単純に文字コードでソートしている。
(読み込み時に空白が最後尾ということはDESCを付けているのでしょうか?)

>並び替え後は半角と全角との区別はなく、並び替えられます
・これは文字コードが原因ではなく、VBで「あいまい検索」のようなことが行われているのではないでしょうか?
「あいまい検索」とは、「a」と「A」を同一のものとして見て検索す...続きを読む

Qアセンブラ言語の数字を数値に変換するプログラム

LD GR3,GR1 ;GR3にGR1の数字を入れる。
AND GR3,=#000F ;数字を数値に変換

というアセンブラのプログラムがあったのですが、なぜGR3と16進数#000Fの論理積をとることで数字を数値に変換できるのでしょうか。

それと、ここでいう数字、数値の違いとは、数字の1はコンピュータ上では
49という数値に変換される(アスキー文字)という認識でよろしいでしょうか。

Aベストアンサー

2進数で表したときの下4桁だけが残ることになるからです。

アスキーコードでは、数字の「1」は、10進で49、16進で31です。
16進の31を2進数に直すと、0011 0001です。
これと16進のOF、つまり2進の0000 1111と論理積をとると、0000 0001となり、数値の1になります。

Qdatagridview で昇順に

vbを始めたばかりですが、
教えてください(2005)

datagridview で大きい順にならべたいのですが、

Dim Table As DataTable = DirectCast(DataGridView2.DataSource, DataTable)
Dim View As DataView = Table.DefaultView
View.Sort = "A寸法"
だと小さい順になってしまいます。
大きい順にするにはどうすればよいのでしょうか?
よろしくお願いします。

Aベストアンサー

Sortメソッドの説明を確認しましたか?

昇順/降順の区別を指定しない場合DataViewのSortメソッドの既定値は昇順です

並べ替え方向を制御したい場合は 『昇順 ASC』『降順 DESC』をつけます
' 降順にしたければ
View.Sort = "A寸法 DESC"

' 昇順にする場合
View.Sort = "A寸法 ASC" または "A寸法"

参考URL:http://msdn2.microsoft.com/ja-jp/library/system.data.dataview.sort(VS.80).aspx


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

人気Q&Aランキング