网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月12日漏签0天
excel吧 关注:281,179贴子:1,548,647
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 11回复贴,共1页
<<返回excel吧
>0< 加载中...

求助,双重求和+行列双变量计算

  • 只看楼主
  • 收藏

  • 回复
  • 5A_432
  • E见钟情
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
打算做个表,如下图二,首行是变量P的一系列值,首列是变量T的一系列数值,所求数据Z是P、T和Vij的双重求和值,Vij是一个常数数组。如下图一
因为P、T的数值太多了,无力去手动计算,希望通过编辑一个单元格的公式,然后通过横纵向拉数据柄自动填充公式求数据Z。
求助吧里高手,这公式该怎么写?



  • ohm
  • 日新月E
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写一个VBA宏,代码如下,运行doubleSum这个宏就可以了
'vijDataArr: vij数据区域
Sub DoubleSum()
'' let vijDataArea=Range("B2:E7")
Dim vijDataArea, resultArea
On Error GoTo handler
Set vijDataArea = Application.InputBox("请选择vij数据区域", "输入框", , , , , , 8)
Set resultArea = Application.InputBox("请选择结果输出区域(也就是Z的区域)", "输入框", , , , , , 8)
On Error GoTo 0
VijDataArr = vijDataArea.Value2
HLength = resultArea.Rows.Count
VLength = resultArea.Columns.Count
' 获取温度T数组
tArr = resultArea.Cells(1, 1).Offset(0, -1).Resize(VLength, 1).Value2
'' 获取压力P数组
pArr = resultArea.Cells(1, 1).Offset(-1, 0).Resize(1, HLength).Value2
' 结果数组
Dim resultArr
ReDim resultArr(1 To VLength, 1 To HLength)
For r = 1 To VLength
For c = 1 To HLength
result = (Z(VijDataArr, pArr(1, c), tArr(r, 1)))
If TypeName(result) = "Double" Then
resultArr(r, c) = CStr(result)
Else
resultArr(r, c) = "#DIV/0!"
End If
Next c
Next r
resultArea.Value2 = resultArr
Exit Sub
handler:
MsgBox "取消选择"
End Sub
Function Z(VijDataArr, p, T)
Dim aResult As Double
aResult = 0
For i = 1 To UBound(VijDataArr, 1)
For j = 1 To UBound(VijDataArr, 2)
If T <> 0 Then
aResult = aResult + VijDataArr(i, j) * (p ^ i) * (100 / T) ^ j
Else
Z = "#DIV/0!"
Exit Function
End If
Next j
Next i
Z = aResult
End Function
---------跟我一起学习JSA编程吧-------


2025-06-12 18:44:08
广告
  • ohm
  • 日新月E
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果用的是WPS,可以使用JSA代码,比VBA更简洁。
/**
vijDataArr: vij数据区域
**/
function doubleSum(){
const argArr=[undefined ,undefined ,undefined ,undefined ,undefined , 8];
//选取vij区域
const vijDataArea = Application.InputBox("请选择vij数据的区域","输入框",...argArr);
if(!vijDataArea) {
MsgBox("取消选择")
return;
}
let vijDataArr = vijDataArea.Value2;
//选取结果区域
let resultArea = Application.InputBox("请选择Z的区域(结果区域)","输入框",...argArr);
if(!resultArea) {
MsgBox("取消选择")
return;
}
let length = resultArea.Rows.Count;
let width = resultArea.Columns.Count;
//获取温度T数组
let tArr = resultArea.Cells.Item(1,1).Offset(0,-1).Resize(width,1).Value2.flat();
//获取压力P数组
let pArr = resultArea.Cells.Item(1,1).Offset(-1,0).Resize(1,length).Value2.flat();
//结果数组
let resultArr=[];
for(let r=0;r<width;r++){
let rowArr=[];
for(let c=0;c<length;c++){
rowArr.push(Z(vijDataArr,pArr[c],tArr[r]));
}
resultArr.push(rowArr);
}
resultArea.Value2 = resultArr;
//debugger;
}
function Z(vijDataArr,p,T){
let aResult=0.0;
for(let i=0;i<vijDataArr.length;i++){
for(let j=0;j<vijDataArr[0].length;j++){
if(T!==0){
let tempValue =vijDataArr[i][j]*(p**i)*(100/T)**j;
aResult+=tempValue;
}else{
return "#DIV/0!";
}
}
}
return aResult;
}
---------跟我一起学习JSA编程吧-------


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 11回复贴,共1页
<<返回excel吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示